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ó.

+++++

Hozzászólások Hozzászólások RSS

  1. 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?

  2. 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.

Szólj hozzá!

regisztráció, bejelentkezés

Az oldalon nem jelenik meg.

Ezeket a tageket használhatod: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>