Ответ 1
Это возможно с помощью простого автозагрузчика, и это не так сложно сделать:
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';
// $fileName .= $className . '.php'; //sometimes you need a custom structure
//require_once "library/class.php"; //or include a class manually
require $fileName;
}
Но иногда вам нужно настроить $fileName
, чтобы он работал со всеми библиотеками. Это зависит от стандарта автозагрузки и того, как названы имена классов библиотек. Иногда вам нужно разбить имя класса на _
и использовать первый элемент для имени directcotry и добавить его также к имени класса. У меня была, например, вторая библиотека с классом типа Library_Parser
, но структура была Library/library-parser.php
.
Первая библиотека работала напрямую с указанным выше кодом, и все классы были автоматически загружены.
Код был взят из http://www.sitepoint.com/autoloading-and-the-psr-0-standard/, но мне пришлось исправить некоторые части кода (дополнительные символы подчеркивания и обратные косые черты). Я использовал стандартное решение PSR-0.