Ik ben momenteel in php aan het kloten met een stom probleempje, welk normaal gesproken toch simpel opgelost zou moeten kunnen worden.
Ik heb recent een projectje gemaakt wat gebruikt maakt van class autoloading. Hierbij gebruik ik de standaard spl_autoload_register() functie. Dit werkt normaal gesproken gewoon goed, en is sneller dan wanneer ik een eigen functie implementeer (omdat de standaard gemaakt is in C en is meegenomen in PHP).
Ik heb een errorhandler geregistreerd die alle php errors omzet in exceptions. Deze heeft de volgende code (indien relevant):
Nu wilde ik bij een functie kijken of een bepaalde class bestond, en wanneer dit zo was, een instantie aanmaken. Hiervoor wilde ik gebruik maken van class_exists(). Dit werkt goed zolang de class bestaat. Wanneer deze echter niet bestaat, wordt er een LogicException gegooid dat de class niet geladen kan worden.
Dit is vervelend, echter dacht ik het op te lossen door de exception af te vangen en daarmee alsnog de code te runnen die gerund moet worden als de class niet bestaat. Dit lukt echter niet. Ik heb hem in een try catch clossure gezet, welke alle exceptions af moet vangen. Echter knalt het script er nog steeds uit met een fatal error omdat die exception niet gecatched zou worden. Wanneer ik ben aan het debuggen, merk ik inderdaad dat de code in het catchblok niet wordt gerunned.
Het gaat om deze code:
Zie ik nou iets over het hoofd?
Ik heb recent een projectje gemaakt wat gebruikt maakt van class autoloading. Hierbij gebruik ik de standaard spl_autoload_register() functie. Dit werkt normaal gesproken gewoon goed, en is sneller dan wanneer ik een eigen functie implementeer (omdat de standaard gemaakt is in C en is meegenomen in PHP).
Ik heb een errorhandler geregistreerd die alle php errors omzet in exceptions. Deze heeft de volgende code (indien relevant):
PHP:
1
2
3
| function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, $errno, 0, $errfile, $errline); } |
Nu wilde ik bij een functie kijken of een bepaalde class bestond, en wanneer dit zo was, een instantie aanmaken. Hiervoor wilde ik gebruik maken van class_exists(). Dit werkt goed zolang de class bestaat. Wanneer deze echter niet bestaat, wordt er een LogicException gegooid dat de class niet geladen kan worden.
Dit is vervelend, echter dacht ik het op te lossen door de exception af te vangen en daarmee alsnog de code te runnen die gerund moet worden als de class niet bestaat. Dit lukt echter niet. Ik heb hem in een try catch clossure gezet, welke alle exceptions af moet vangen. Echter knalt het script er nog steeds uit met een fatal error omdat die exception niet gecatched zou worden. Wanneer ik ben aan het debuggen, merk ik inderdaad dat de code in het catchblok niet wordt gerunned.
Het gaat om deze code:
PHP:
1
2
3
4
5
6
7
8
| try { if(class_exists($class)) { $pageInstance = new $class; //run code using the class } } catch(Exception $e) { //run code for when class is not found } |
Zie ik nou iets over het hoofd?