PSR-0

Материал из AOW

Перейти к: навигация, поиск

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

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


  • Полностью совместимые пространство имен и класс должны иметь следующую структуру `\<Наименование производителя>\(<Пространство имен>\)*<Название класса>`
  • Каждое пространство имен должно иметь пространство верхнего уровня ("Наименование производителя").
  • Каждое пространство имен может иметь столько подпространств, сколько оно пожелает.
  • Каждый разделитель пространства имен, конвертируется в `DIRECTORY_SEPARATOR` при загрузке из файловой системы.
  • Каждый сивол "\_" в Названии_Класса(CLASS_NAME) конвертируется в `DIRECTORY_SEPARATOR`. Символ "\_" не имеет особого значения в пространстве имен.
  • К полностью совместимому пространству имен и классу добавляется расширение ".php" во время загрузки из файловой системы.
  • Буквы в наименование производителя, пространствах имен, классах могут быть любым сочетанием нижнего и верхнего регистра.

Примеры


  • `\Doctrine\Common\IsolatedClassLoader` => `/путь/к/проекту/lib/vendor/Doctrine/Common/IsolatedClassLoader.php`
  • `\Symfony\Core\Request` => `/путь/к/проекту/lib/vendor/Symfony/Core/Request.php`
  • `\Zend\Acl` => `/path/to/project/lib/vendor/Zend/Acl.php`
  • `\Zend\Mail\Message` => `/путь/к/проекту/lib/vendor/Zend/Mail/Message.php`

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


  • `\Пространство_Имен\Пакет\Название_Класса` => `/путь/к/проекту/lib/vendor/namespace/package/Class/Name.php`
  • `\Пространство_Имен\Название_Пакета\Название_Класса` => `/путь/к/проекту/lib/vendor/namespace/package_name/Class/Name.php`

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


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


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

   <?php
   
   function autoload($className)
   {
       $className = ltrim($className, '\\');
       $fileName  = ;
       $namespace = ;
       if ($lastNsPos = strripos($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)[1]


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

Источник — «http://doc.artofweb.ru/doc/PSR-0»
Личные инструменты

Разработка веб-сайтов, автоматизация.
По всем вопросам обращайтесь по телефонам:

+7 495 640 29 90
http://artofweb.ru