Ниже представлены требования, обязательные к исполнению в целях обеспечения совместимости механизмов автозагрузки.
Обязательные требования:
-
Полностью определённое пространство имён и имя класса должны иметь следующую структуру: <Vendor Name>(<Namespace>)*<Class Name>.
-
Каждое пространство имён должно начинаться с пространства имён высшего уровня, указывающего на разработчика кода («имя производителя»).
-
Каждое пространство имён может включать в себя неограниченное количество вложенных подпространств имён.
-
Каждый разделитель пространства имён при обращении к файловой системе преобразуется в РАЗДЕЛИТЕЛЬ_ИМЁН_КАТАЛОГОВ.
-
Каждый символ _ («знак подчёркивания») в ИМЕНИ_КЛАССА преобразуется в РАЗДЕЛИТЕЛЬ_ИМЁН_КАТАЛОГОВ. При этом символ _ («знак подчёркивания») не обладает никаким особенным значением в имени пространства имён (и не претерпевает преобразований).
-
При обращении к файловой системе полностью определённое пространство имён и имя класса дополняются суффиксом .php.
-
В имени производителя, имени пространства имён и имени класса допускается использование буквенных символов в любых комбинациях нижнего и верхнего регистров.
Примеры
-
DoctrineCommonIsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
-
SymfonyCoreRequest => /path/to/project/lib/vendor/Symfony/Core/Request.php
-
ZendAcl => /path/to/project/lib/vendor/Zend/Acl.php
-
ZendMailMessage => /path/to/project/lib/vendor/Zend/Mail/Message.php
Знак подчёркивания в именах пространств имён и классов
-
namespacepackageClass_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
-
namespacepackage_nameClass_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
Источник:
Нет Ответов