Быстрая рекурсивная автозагрузка классов в PHP

от автора

Недавно я начал разрабатывать очередной 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *