PSR-0 Стандарт автозагрузки (на русском) - стандарт программирования - читать
Primary tabs
Уже устарел
ВНИМАНИЕ: PSR-0 устарел ("Deprecated" - По состоянию на 21 октября 2014) - вместо него рекомендуюется использовать стандарт PSR-4.
Что было раньше - PSR-0
Ниже описаны обязательные требования, которые должны быть выполнены для совместимости с автозагрузчиком классов.
Обязательно
- Полное пространство имён вместе с классом должны иметь следующую структуру:
\<Имя производителя>\(<Пространство имён>\)*<Имя класса>
- У каждого пространства имён должен быть корневой уровень ("Имя Производителя").
- У каждого пространства имён может быть не ограниченное количество подуровней, по мере необходимости.
- Все разделители пространства имён преобразуются в DIRECTORY_SEPARATOR при загрузке из файловой системы.
- Каждый символ _ в ИМЕНИ КЛАССА преобразуется в 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.
- Log in to post comments
- 7780 reads