При создании библиотеки я всегда предоставляю класс Autoloader
, который обрабатывает автозагрузку для библиотеки. Автозагрузчик регистрируется так:
require_once 'path/to/PHP-Parser/lib/PHPParser/Autoloader.php';
PHPParser_Autoloader::register();
Хотя я не уверен, как с этим справиться, если моя библиотека зависит от другой библиотеки. Представьте, что PHPParser
зависит от PHPLexer
. Теперь при использовании библиотеки нужно написать:
require_once 'path/to/PHP-Lexer/lib/PHPLexer/Autoloader.php';
PHPLexer_Autoloader::register();
require_once 'path/to/PHP-Parser/lib/PHPParser/Autoloader.php';
PHPParser_Autoloader::register();
Если существует более одной зависимости или зависимости сами имеют зависимости, это может быстро запутаться.
Итак, как справиться с автозагрузкой зависимостей ?
Одна идея, которая у меня возникла, заключалась в том, что библиотека должна обрабатывать автозагрузку также и для своих зависимостей, но это просто не правильно. Другая идея заключается в том, чтобы вообще не предоставлять автозагрузчик и предполагать, что люди используют UniversalClassLoader
. Хотя это тоже не кажется правильным.