alestro
@alestro

Производительность. Много ли съест ресурсов динамическая функция подгрузки файлов?

Целесообразно ли использовать динамическую подгрузку файлов.
Есть небольшой класс, который реализует функцию 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 - сначала хотел разбить код на функции, но пока не знаю целесообразен ли он вообще, не хочу этого делать.
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 3
muhammad_97
@muhammad_97
PHP-разработчик
Лучше посмотрите как это сделано в Composer. Строится карта классов (classmap) и сохраняется в файл.
Ответ написан
Adamos
@Adamos
Ответ написан
Комментировать
@IsaevDev
Нужно копать в сторону psr-4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы