Недавно я начал разрабатывать очередной php проект, который использует множество классов, так как полностью построен на ООП. Следовательно я решил использовать автозагрузчик классов, однако мне нужен был такой, который мог бы найти любой класс в проекте, и при этом не слишком нагружал систему. Был написан следующий код:
<?php class autoload { //Список директорий, которые следует исключить из поиска private static $exception_list = []; //Список ранее найденных директорий private static $founded_list = []; public static function search($dir, $file_to_search) { //Если попали на директорию, исключенную из поиска, или уже подключали требуемый класс то игнорируем ее if(in_array($dir, static::$exception_list) || isset(static::$founded_list[$file_to_search])) { return; } //Сканируем текущую директорию в поисках класса $scan = glob("$dir/*"); foreach ($scan as $path) { if (preg_match('/\.php$/', $path) && is_file($path)) { //Если нашли, то "запоминаем" директорию и подключаем файл static::$founded_list[basename($path)] = $path; if(basename($path) == $file_to_search) { include_once $path; return; } } elseif (is_dir($path)) { self::search($path, $file_to_search); } } } } function __autoload(string $class){ Autoload::search(ROOT, $class . '.php'); }
Надеюсь кому-нибудь пригодится данный код в его работе.
ссылка на оригинал статьи https://habr.com/post/423509/
Добавить комментарий