PSR-0: Autoloading Standard

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

Устаревший — по состоянию на 21.10.2014 PSR-0 отмечен как УСТАРЕВШИЙ. В качестве альтернативы теперь рекомендуется PSR-4.

Обязательно

  • Полностью определенное пространство имен (namespace) и класс (class) должны иметь следующую структуру: \<Vendor Name>\(<Namespace>\)*<Class Name>
  • Каждое пространство имен должно иметь пространство имен верхнего уровня ("Vendor Name").
  • Каждое пространство имен может иметь столько подпространств имен, сколько пожелает.
  • Каждый разделитель пространства имен преобразуется в DIRECTORY_SEPARATOR при загрузке из файловой системы.
  • Каждый символ _ в CLASS NAME преобразуется в DIRECTORY_SEPARATOR. Символ _ не имеет специального значения в пространстве имен.
  • Полностью квалифицированное пространство имен и класс добавляются суффиксом .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;
}
spl_autoload_register('autoload');

Реализация SplClassLoader

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

Подобные материалы
Справочные материалы данной темы

CRG Home 2026

Не является публичной офертой.