Целесообразно ли использовать динамическую подгрузку файлов.
Есть небольшой класс, который реализует функцию autolod, в дальнейшем хочу так же подгружать любой необходимый файл. Как подгружаю: сначала функция принимает путь корня сайта, потом рекурсивно строит массив с путями всех директорий, а потом пробегает его форичем, проверяет существует ли запрошенный файл и если да, то подключает его, причем форич не прерывается до тех пор пока не пройдет все пути.
Код:
class Loader{
const DS = DIRECTORY_SEPARATOR;
private static $path;
private static $namespaces = false;
private static $root;
private static $dirlist=[];
public static function setRoot($root){
static::$root=$root;
}
public static function searchDir($root){
$scan = scandir($root);
foreach($scan as $dir){
if(is_dir($root.self::DS.$dir) and $dir != '.' and $dir !='..'){
static::$dirlist[]=$root.self::DS.$dir;
static::searchDir($root.self::DS.$dir);
}
}
}
public static function setAutoload($autoload=[self,'autoload']){
spl_autoload_register($autoload);
}
public static function autoload($class){
$class = explode('\\',strtolower($class));
$name = array_pop($class);
if(!empty($class)){
static::$path = static::$root.self::DS.implode(self::DS,$class).self::DS.$name.'.php';
static::$namespaces=true;
require_once(static::$path);
}
else{
static::$namespaces=false;
!empty(static::$dirlist)?:static::searchDir(static::$root);
foreach(static::$dirlist as $dir){
if(file_exists($dir.self::DS.$name.'.php')){
require_once($dir.self::DS.$name.'.php');
}
}
static::$path = static::$root.self::DS.$name.'.php';
}
}
}
По поводу лишних телодвижений с установкой флага $namespaces - сначала хотел разбить код на функции, но пока не знаю целесообразен ли он вообще, не хочу этого делать.