Nette\Debug
Knihovna Nette\Debug, která zdomácněla pod jménem Laděnka, je užitečnou každodenní pomocnicí PHP programátora.
Zachytávání chyb a výjimek
Zachytáváni chyb je nejlepší zapnout na samém začátku, hned po načítání Nette.
require LIBS_DIR .'/Nette/loader.php';
Debug::enable();
Volání Debug::enable() aktivuje laděnku, která sama
detekuje, zda běží na vývojovém nebo produkčním
servru. Na vývojovém zobrazuje výjimky uživateli-vývojáři, na
produkčním chyby loguje, případně posílá informaci na e-mail. Na
zjištění, jestli beží Nette na produkčním servru použijte metodu
Environment::isProduction(). Další informace najdete v API třídy Debug.
Zpráva o nezachycené výjimce nebo chybě poskytuje vývojáři důležitou informaci o tom, kde a proč k ní došlo. Standardní výstup v PHP vypadá asi takto:
Pusťme však ke slovu Laděnku. Po aktivaci příkazem
Debug::enable() nám předvede svou nejvíce sexy podobu:
Takto vypadá výjimka, takto
vypadá vygenerovaná chyba. To je pak
jiné ladění, co? Takto zobrazeny jsou automaticky všechny fatální chyby.
Pro ještě hlubší odvšivování lze zapnout striktnější mód. Pak budou
stejným způsobem zobrazeny i chyby nižších úrovní jako
E_NOTICE a E_WARNING.
Debug::$strictMode = TRUE;
Jednotlivé části obrazovky lze navíc pohodlně myší rozklikávat:

Jsou ale situace, kdy si určité části kódu chceme ošetřit přes
try/catch a ne každé vyhození vyjímky musí následovat
ukončením skriptu. Metoda processException()
má za úkol zobrazit/zalogovat výjimku a předat řízení zpět aplikaci,
narozdíl od exceptionHandler(),
který po zpracování vyjímky činnost aplikace ukončí.
Variable dump
Každý ladič je dobrým kamarádem s funkcí var_dump, která podrobně vypíše obsah
proměnné. Bohužel v prostředí HTML výpis pozbude formátování a slije
se do jednoho řádku, o sanitizaci HTML kódu ani nemluvě. V praxi je
nezbytné var_dump nahradit šikovnější funkcí. Tou je
právě Debug::dump()
$arr = array(10, 20.2, TRUE, NULL, 'hello');
Debug::dump($arr);
// včetně jmenného prostoru Nette\Debug::dump($arr);
vygeneruje výstup:
<pre><span style="color:gray">array</span>(5) {
[0] => <span style="color:gray">int</span>(10)
[1] => <span style="color:gray">float</span>(20.2)
[2] => <span style="color:gray">bool</span>(true)
[3] => <span style="color:gray">NULL</span>
[4] => <span style="color:gray">string</span>(5) "hello"
}
</pre>
Měření času
Dalším užitečným nástrojem ladiče jsou stopky s přesností na mikrosekundy:
Debug::timer();
// princi můj malinký spi, ptáčkové sladce již sní...
sleep(2);
$elapsed = Debug::timer();
// $elapsed ≈ 2
Volitelným parametrem je možno dosáhnout vícenásobných měření.
Debug::timer('page-generating');
// nějaký kód
Debug::timer('rss-generating');
// nějaký kód
$rssElapsed = Debug::timer('rss-generating');
$pageElapsed = Debug::timer('page-generating');
Profiler
Profiler se zapíná pomocí příkazu
Debug::enableProfiler();
Má své API a podporuje přetahování myší. Přidat do něj další informace se dá velmi snadno:
Debug::$counters['Last SQL query'] = & dibi::$sql;
Debug::$counters['Nette version'] = Framework::VERSION . ' ' . Framework::REVISION;
Debug::addColophon(array('dibi', 'getColophon'));
Veškerý výstup profileru lze vypnout voláním
Debug::disableProfiler();
Viz také:





