Хорошо, вот как это работает изнутри.
Когда вы пытаетесь использовать класс, которого не существует, он вызывает каждый из обратных вызовов spl_autoload
один за другим, пока класс не существует (и функция __autoload
является одной из них). Если его нет в конце цепочки, возникает ошибка «класс не найден».
Когда вы вызываете class_exists
без второго параметра (который говорит ему не пытаться загрузить его, если он не существует), он вызывает цепочку spl_autoload
обратных вызовов до тех пор, пока либо не найдет класс, либо не будет вызван последний метод. Затем он возвращается, если он нашел класс.
Так что все зависит от того, что вы делаете в функции автозагрузки. Если вы сделаете что-то вроде:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (!file_exists($class)) {
die('Could not find '.$class);
}
require_once $filename;
}
Это убьет выполнение, и это не будет работать так, как задумано. Вместо этого вам следует сделать:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (file_exists($class)) {
require_once $filename;
}
}
Это все, что вам нужно сделать.
Теперь вы не хотите, чтобы файл запускался. Это нормально. Для этого есть простое решение. Не помещайте этот файл в тот же каталог, что и ваши автоматически загруженные классы. Это побеждает цель автозагрузки.
Единственное другое решение - сохранить карту имен классов и имен файлов и основывать свою автозагрузку на этом. В противном случае он всегда будет выполнять файл (поскольку это то, что вы просите его сделать) ...
person
ircmaxell
schedule
28.09.2010
ClassName doesn't exists....
послеThis will crash all
, поскольку по умолчанию ей все равно, если класс не загружен. Я подозреваю, что вы убиваете выполнение в функции__autoload
, если не находите класс, и вам не следует ... - person ircmaxell   schedule 28.09.2010