A szokásos "napi" php.net böngészgetésem során bukkantam rá a lentebb olvasható kódrészletre (bár nem egy bonyolult dolog, de mégsem jutott volna magamtól eszembe), amit szerintem kötelezővé kellene tenni minden egyes PHP alapú alkalmazás fejlesztési időszaka alatt. A kód nem csinál mást, mint hogy minden hibát kivétellé alakít át, így ha nincsenek elkapva, akkor egy egyszerű E_NOTICE-tól is lehal az oldal fatal error-ral, az error_reporting beállítástól függetlenül. :)
function error_handler($errno, $errstr, $errfile, $errline) { throw new ErrorException( $errstr, 0, $errno, $errfile, $errline ); } set_error_handler('error_handler');
Egyéni ízlés kérdése, de én még az alábbi kóddal kiegészíteném, hogy fatal error-ok helyett inkább valami olvasható dolgot kapjak:
function exception_handler($ex) { print('<pre>'.$ex.'</pre>'); } set_exception_handler('exception_handler');
És hogy miért is lenne hasznos? Elég sokan kikapcsolják az E_NOTICE-ok jelzését még fejlesztés alatt is, mondván hogy az nem számít. Pedig elég sok kisebb hibára (pl. változó név vagy tömb kulcs elgépelésekre) hívhatná fel a figyelmet, amik így csak a tesztelési időszakban derülnek ki (ha kiderülnek). Emellett biztonsági haszna is van, mint az a php.net-en is olvasható.


Gondolod, ha valaki annyira töketlen, hogy fejlesztés alatt az E_NOTICE-nál magasabb hibaszintet használ, pont egy ilyen megoldással fog „vacakolni”? Egyébiránt nem látom, hogy milyen pluszt nyújt a helyes módszertan elsajátításával szemben?
Nem sok esélyét látom annak, hogy most ezzel sikerülni fog megváltani a világot, de hátha... :-)
A plusz, amit nyújt az az, hogy ha a második kódrészletet elhagyjuk, akkor egy sima E_NOTICE esetén is lehal a script, ami azért zavaróbb/feltűnőbb, mintha csak kiírna (vagy nem írna ki) valamit. De biztos van egyéb haszna is annak, ha kivétel jön az alapértelmezett hibaszövegek helyett.