Zerknij jak to jest zrobione w symfony. Tam nie została użyta klasa reflection, tylko poprzez instanceof jest sprawdzane czy powiedzmy jest to jakaś klasa wyjątku, która dziedziczy HttpException. Gdzie HttpException z kolei dziedziczy RuntimeException.
W symfony masz taki katalog:
Kod
symfony.2.0.9\vendor\symfony\src\Symfony\Component\HttpKernel\Exception
W tym katalogu masz wyjątki http, a w tym katalogu:
Kod
symfony.2.0.9\vendor\symfony\src\Symfony\Component\HttpKernel\Debug
masz error handlera i exception handlera. Widzę że teraz jest to nieco inaczej zrobione, bo w wczesnej wersji 2, całkiem inaczej wyglądał ten handler, tzn była możliwość wybrania szablonu dla błędu, że można było rzucić błąd np w json. A teraz widzę że uznali że lepiej jest rzucać wszystkie błędy w html i nie angażować do tego inne klasy (przykładowo klasa templatek), które mogłyby spowodować dodatkowe błędy (tak mi się wydaje, bo swego czasu też się nad tym zastanawiałem

).
Nie wiem szczerze mówiąc jak to jest w innych frameworkach, ale podejrzewam że jest podobnie rozwiązane, poprzez kilka dodatkowych klas wyjątków, bo w sumie jest to najlepsze wyjście i wtedy wystarczy tylko rzucić wyjątek i już mamy piękną stronę błędu:
throw new NotFoundHttpException('jakies info, ktore mozna zapisac w logach');
Na szybo przeszukałem dokumentacje kohany i tam jest to bardzo podobnie rozwiązane:
http://kohanaframework.org/3.2/guide/kohan...als/error-pages również jest sprawdzanie czy dany wyjątek dziedziczy HTTP_Exception i jeżeli tak, dorzucany jest stosowny kod, który zawiera wyjątek. Powiedziałbym że jest to niemal identycznie jak w symfony rozwiązane.
W zendzie i pozostałych frameworkach najpewniej jest podobnie, aczkolwiek, nie identycznie

osobiście sam z dość zbliżonego do symfony rozwiązania korzystam i chwalę sobie