Permalink
Switch branches/tags
Nothing to show
Find file Copy path
5e33e46 Dec 21, 2013
0 contributors

Users who have contributed to this file

73 lines (45 sloc) 5.47 KB

Автозагрузчик

Ключевые слова «ОБЯЗАН», «НЕ ОБЯЗАН», «НЕОБХОДИМ», «ЖЕЛАТЕЛЕН», «НЕ ЖЕЛАТЕЛЕН», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «РЕКОМЕНДОВАН», «ВЕРОЯТЕН», и «ОПЦИОНАЛЕН» в этом документе СЛЕДУЕТ интерпретировать в соответствии с RFC 2119.

1. Обзор

PSR-4 описывает спецификацию для автозагрузки классов из путей к файлам. Он полностью совместим и может быть использован в дополнении к любой другой спецификации автозагрузки, включая PSR-0. PSR-4 также описывает, где размещать файлы, которые будут автоматически загружены в соответствии со спецификацией.

2. Спецификация

  1. Термин "класс" означает классы, интерфейсы, трэйты и другие подобные структуры.

  2. Полное имя класса имеет следующую форму:

     \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
    
    1. Полное имя класса ОБЯЗАНО иметь пространство имён верхнего уровня, так же известное как "пространство имён поставщика".

    2. Полное имя класса МОЖЕТ иметь одно или более суб-пространство имён.

    3. Полное имя класса ОБЯЗАНО иметь завершающее имя класса.

    4. Символы нижнего подчёркивания не имеют специального назначения в любой области полного имени класса.

    5. Алфавитные символы в полном имени класса МОГУТ иметь любое сочетание нижнего и верхнего регистра.

    6. Все имена классов ОБЯЗАНЫ сслылаться на путь с учётом регистра.

  3. При загрузке файла, который соответствует полному имени класса ...

    1. Непрерывный ряд одного или более ведущих пространств и суб-пространств имён, не включая ведущий разделитель пространств имён, в полном имени класса ("префикс пространства имён") соответствует по меньшей мере одному "базовому директорию".

    2. Непрерывный ряд суб-пространств имён после "префикса пространства имён" соответствует поддиректорию в "базовом директории", в котором разделители пространств имён представляют разделители директорий. Имя поддиректория ОБЯЗАНО соответствовать регистру суб-пространств имён.

    3. Завершающее имя класса соответствует имени файла, оканчивающегося на .php. Имя файла ОБЯЗАНО соответствовать регистру завершающего имени класса.

  4. Реализации автозагрузчика НЕ ОБЯЗАНЫ бросать исключения, НЕ ОБЯЗАНЫ вызывать ошибки любого уровня, и НЕ ДОЛЖНЫ возвращать значение.

3. Примеры

В таблице ниже показано соответствие пути к файлу для заданного полного имени класса, префикса пространства имён и базового директория.

Полное имя класса Префикс пространства имён Базовый директорий Путь к файлу
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

Примеры реализации автозагрузчиков, соответствующих спецификации. Они НЕ ДОЛЖНЫ рассматриваться как часть спецификации и МОГУТ быть изменены в любое время.