Попалась тут задачка...
есть несколько вариантов написания библиотек с классами... почему так? потому что разные источники и у каждого свои исторически сложившиеся наименования...
В частности их было 3:
1) ClassName.class.php
2) ClassName.php
3) class/ClassName.php
где ClassName - имя вызываемого класса.
естественно, что решение с простым использованием include/require в функции __autoload в данном случае не подходил.
в итоге пришёл вот к такому коду:
function __autoload($className){
if (is_file('class/' . $className . '.php')) {
include_once ('class/' . $className . '.php');
} elseif (is_file($className . '.class.php')) {
include_once ($className . '.class.php');
} elseif (is_file($className . '.php')) {
include_once ($className . '.php');
} else {
throw new ErrorException('Не удаётся закрузить класс "' . $className . '"');
}
}
Оторвал бы руки нахрен
ОтветитьУдалитьА вы слыхали про file_exists() или is_file()? А вы знаете что собака @ - плохой тон, и будет убрана из php6.
ОтветитьУдалитьСоветую вам взглянуть как работают функции автолоада в фреймворках, ну хотя бы CI.
P.S. Тоже бы руки оборвал
не надо руки отрывать - они мне нужны ещё :)
ОтветитьУдалитьЯ не спорю, что is_file (кстати, file_exists не катит - он и на директорию скажет TRUE) лучше, но для той задачки того, что я написал было достаточно на тот момент :)
огладываясь сейчас вижу больше ошибок (помимо тех, что озвучили вы) - например наличие var_dump
в общем, вместо
function __autoload($className){
if (!(@include_once('class/'.$className.'.php')))
if (!(@include_once($className.'.class.php')))
if (!(@include_once ($className.'.php')))
var_dump($className);
}
сейчас написал бы так:
if (is_file('class/' . $className . '.php')) {
include_once ('class/' . $className . '.php');
} elseif (is_file($className . '.class.php')) {
include_once ($className . '.class.php');
} elseif (is_file($className . '.php')) {
include_once ($className . '.php');
} else {
throw new ErrorException('Не удаётся закрузить класс "' . $className . '"');
}
ЗЫ: а наличие var_dump значит вас устроило, да?