Как определить, что класс не существует, не вызывая ошибки - PullRequest
18 голосов
/ 10 июня 2011

Я столкнулся с интересной дилеммой. В классе DataMapper я создаю имя класса, которое будет использоваться для возвращаемых строк из базы данных.

Дело в том, что все мои классы загружаются автоматически и могут поступать из разных мест (библиотеки, приложения / модели и т. Д.), И я хотел проверить, действительно ли сгенерированное имя класса существует. Теперь можно подумать, что:

try
{
    $test = new $className();
}
catch(Exception $ex)
{
    // Class could not be loaded
}

Но, конечно же, ошибки php (вместо создания исключения), говорящие о том, что класс не найден ... Не очень полезны. Если не считать перезаписи автозагрузчика в Zend_Loader для поиска во всех каталогах, чтобы узнать, может ли класс быть загружен, есть ли способ сделать это?

Для тех, кто интересуется, почему мне нужно сделать это, вместо того, чтобы просто показать ошибку Class Not Found, если класс не найден, я хочу создать класс в заранее определенном месте, чтобы облегчить мою жизнь как этот проект идет вместе.

Заранее спасибо! Терри

P.S. Дайте мне знать, если вам, ребята, нужна дополнительная информация.

1 Ответ

27 голосов
/ 10 июня 2011

Функция PHP class_exists() имеет флаг для запуска автозагрузчика, если класс еще не загружен:

http://www.php.net/class_exists

То есть вы просто пишете

if (!class_exists($className)) {
    // generate the class here
}
...