Ниже представлены требования, обязательные к исполнению в целях обеспечения совместимости механизмов автозагрузки.

Обязательные требования:

  • Полностью определённое пространство имён и имя класса должны иметь следующую структуру: <Vendor Name>(<Namespace>)*<Class Name>.

  • Каждое пространство имён должно начинаться с пространства имён высшего уровня, указывающего на разработчика кода («имя производителя»).

  • Каждое пространство имён может включать в себя неограниченное количество вложенных подпространств имён.

  • Каждый разделитель пространства имён при обращении к файловой системе преобразуется в РАЗДЕЛИТЕЛЬ_ИМЁН_КАТАЛОГОВ.

  • Каждый символ _ («знак подчёркивания») в ИМЕНИ_КЛАССА преобразуется в РАЗДЕЛИТЕЛЬ_ИМЁН_КАТАЛОГОВ. При этом символ _ («знак подчёркивания») не обладает никаким особенным значением в имени пространства имён (и не претерпевает преобразований).

  • При обращении к файловой системе полностью определённое пространство имён и имя класса дополняются суффиксом .php.

  • В имени производителя, имени пространства имён и имени класса допускается использование буквенных символов в любых комбинациях нижнего и верхнего регистров.

Примеры

  • DoctrineCommonIsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

  • SymfonyCoreRequest => /path/to/project/lib/vendor/Symfony/Core/Request.php

  • ZendAcl => /path/to/project/lib/vendor/Zend/Acl.php

  • ZendMailMessage => /path/to/project/lib/vendor/Zend/Mail/Message.php

Знак подчёркивания в именах пространств имён и классов

  • namespacepackageClass_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php

  • namespacepackage_nameClass_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

Представленные здесь стандарты должны восприниматься как минимально необходимый набор правил для обеспечения совместимости автозагрузчиков. Вы можете проверить, насколько вы следуете указанным правилам, воспользовавшись следующим примером реализации SplClassLoader (ориентирован на загрузку классов PHP 5.3).

Пример реализации

Ниже представлен пример функции, иллюстрирующей, как описанные выше требования влияют на процесс автозагрузки:

<?php

function autoload($className)
{
    $className = ltrim($className, '\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
 
    require $fileName;
}

Реализация SplClassLoader

Ниже представлен пример реализации SplClassLoader, способного выполнять автозагрузку ваших классов при условии, что вы следуете описанным выше требованиям.

В настоящий момент такой подход является рекомендуемым для загрузки классов PHP 5.3 при условии соблюдения данного стандарта: http://gist.github.com/221634


Источник:

(1) https://svyatoslav.biz/misc/psr_translation/#_PSR-0

Tags

Нет Ответов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики


Подпишись на новости
👋

Есть вопросы?