Хорошо, вот как это работает внутри.
Когда вы пытаетесь использовать класс, который не существует, он вызывает каждый из spl_autoload
обратных вызовов один за другим, пока класс не существует (и функция __autoload
является одной из них). Если он не существует в конце цепочки, возникает ошибка класса not found.
Когда вы вызываете 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;
}
}
Это все, что вам нужно сделать.
Теперь вы не хотите, чтобы файл выполнялся. Все в порядке. Это простое решение. Не помещайте этот файл в тот же каталог, в котором находятся ваши загружаемые классы. Это побеждает цель автозагрузки.
Единственным другим решением было бы сохранить карту имен классов с именами файлов и основывать свою автозагрузку на этом. В противном случае он всегда будет выполнять файл (поскольку это то, о чем вы просите) ...