При запуске приложения Zend Framework оно регистрирует свой автозагрузчик, используя spl_autoload_register
(http://php.net/spl_autoload_register). Теперь при любых вызовах class_exists будет использоваться автозагрузчик Zend (по умолчанию class_exists
пытается загрузить класс).
Причина, по которой вы получаете сообщение об ошибке при использовании class_exists с Tracker_
, а не Application_
, заключается в том, что автозагрузчик пространства имен приложения обрабатывается Zend_Application_Module_Autoloader
(Zend_Loader_Autoloader_Resource), который действует немного иначе, чем автозагрузчик Zend_Loader
.
Zend_Loader
выполняет некоторые базовые проверки безопасности, а затем просто пытается включить данный файл. Автозагрузчик ресурса фактически использует метод, который сначала проверяет, является ли файл для автозагрузки доступным для чтения, а если нет, то он не пытается включить его.
Таким образом, причина того, что вы получаете ошибку с Tracker_
, заключается в том, что при попытке автозагрузки не выполняется проверка ошибок, а Application_
имеет проверку ошибок.
Вы также можете подавить это, позвонив по номеру Zend_Loader_Autoloader::getInstance()->suppressNotFoundWarnings(true);
Обычно вы не хотите включать это, хотя это может создать больше путаницы позже.
Класс существует вызовет автозагрузчик, потому что если файл, содержащий класс, еще не был включен, то класс не существует, поэтому он должен попытаться сначала попытаться загрузить его, если он не может автоматически загрузить его, то вы получить ошибку включения из Zend Framework.
Надеюсь, это немного прояснило для вас.