СоХабр закрыт.
С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.
<?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');
}
комментарии (17)