MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
PSR-0 – Стандарт автозагрузки
13.04.2017
16:56
Текстовые метки: php, psr, psr-0, psr0, psr 0, стандарт
Раздел: Компьютер - Программирование - Язык PHP

Этот (да-да, очередной) перевод был сделан потому, что существующие переводы (при всём глубоком уважении к их авторам) либо не покрывают все PSR-стандарты, либо частично устарели, либо по каким-то иным причинам меня не устроили.

Перевод стандарта PSR-0

Оригинал: http://www.php-fig.org/psr/

(перевод от 15.09.2014)


PSR-0 – Стандарт автозагрузки

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

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

  • Полностью определённое пространство имён и имя класса должны иметь следующую структуру: \<Vendor Name>\(<Namespace>\)*<Class Name>.
  • Каждое пространство имён должно начинаться с пространства имён высшего уровня, указывающего на разработчика кода («имя производителя»).
  • Каждое пространство имён может включать в себя неограниченное количество вложенных подпространств имён.
  • Каждый разделитель пространства имён при обращении к файловой системе преобразуется в РАЗДЕЛИТЕЛЬ_ИМЁН_КАТАЛОГОВ.
  • Каждый символ _ («знак подчёркивания») в ИМЕНИ_КЛАССА преобразуется в РАЗДЕЛИТЕЛЬ_ИМЁН_КАТАЛОГОВ. При этом символ _ («знак подчёркивания») не обладает никаким особенным значением в имени пространства имён (и не претерпевает преобразований).
  • При обращении к файловой системе полностью определённое пространство имён и имя класса дополняются суффиксом .php.
  • В имени производителя, имени пространства имён и имени класса допускается использование буквенных символов в любых комбинациях нижнего и верхнего регистров.

Примеры

  • \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
  • \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
  • \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
  • \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

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

  • \namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
  • \namespace\package_name\Class_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


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования