onPHP/onphp-framework — pull request #120 by AlexeyDsov (2012-07-28 08:48:27+00:00)
Title: Autoloader, class_exists, ClassNotFoundException

Давно в onPHP есть определенные проблемы с автолоадером на которые наталкиваешься при подключении автолоадеров других проектов и при проверке существования классов.

1. При использовании class_exists если класс не существует, то кидается ClassNotFoundException, хотя метод должен работать корректно и возвращать false
2. Невозможно в spl подключить другой автолоадер позже автолоадера из onPHP, т.к. он если не находит класс бросает ClassNotFoundException.

В предлагаемом варианте:
1. Вынесено бросание ClassNotFoundException в отдельную функцию для spl_autoload_register. Который в свою очередь бросает ClassNotFoundException в случае если вызов не был сделан через функции class_exists, interface_exists, trait_exists. Эта функция должна перезаписываться в конец стека автолоадеров, через вызов ```Autoloader::registerClassNotFoundLoader();```
2. Основные функции для автолоадера теперь не вызывают функцию __autoload_failed и соответственно не бросают ClassNotFoundException.

Что при этом сломается:
1. Если кто-то оборачивал class_exists, inteface_exists, trait_exists try/catch/ClassNotFoundException - теперь такой ошибки бросаться не будет.
2. Если кто-то использовать Assert::classExists, то сейчас он бросает WrongArgumentException вместо ClassNotFoundException. Тут можно оставить что б бросался ClassNotFoundException. Не могу сказать как оно должно быть правильней.