Co kdyby se E_WARNING převáděly na výjimky?
- David Grudl
- Nette Core | 8227
Že by Nette jen předbíhalo vývoj PHP? http://wiki.php.net/…s_exceptions
- mlady
- Člen | 24
David Grudl napsal(a):
Že by Nette jen předbíhalo vývoj PHP? http://wiki.php.net/…s_exceptions
Tak teraz neviem či im posielaš feature requesty alebo chlapci z http://php.net sledujú https://forum.nette.org ;) Myslím, že to nie je prvý krát čo si ich v niečom predbehol :)
- Blizzy
- Člen | 149
Panda napsal(a):
S tím předbíháním to asi nebude zas tak horké…
Jde o to, že PHP to ještě nemá implementované, ale Nette už ano.
- pekelnik
- Člen | 462
Používám Strict Mode – pokud by měli existovat dva „módy“…
- Immediate Death
- Convert To Exception
…jsem jedině pro. V praxi to bude tím použitelnější…
Ruku v ruce s těmito úpravami bych uvítal tak možnost logovat chyby
nezávisle na zapnuté/vypnuté laděnce…
Při ladění např. AJAXu v jiném prohlížeči než Firefox je to
nutnost…
- vrana
- Člen | 131
E_USER_WARNING
a E_USER_NOTICE
rozhodně
nepřevádět, zrušilo by to jediný rozumný způsob zacházení
s výjimkami, které nemají způsobit pád celé aplikace, ale přitom se
o nich chci dozvědět:
<?php
try {
throw new Exception("Nefatální chyba");
} catch (Exception $e) {
trigger_error($e);
}
?>
A tohoto „návrhového vzoru“ bude po zavedení překladu varování na výjimky potřeba čím dál tím víc. Tedy pokud si někdo bude dělat hlavu s tím, že ne všechny chyby, ke kterým dojde, musí být rovnou fatální.
- Majkl578
- Moderator | 1364
vrana napsal(a):
E_USER_WARNING
aE_USER_NOTICE
rozhodně nepřevádět, zrušilo by to jediný rozumný způsob zacházení s výjimkami, které nemají způsobit pád celé aplikace, ale přitom se o nich chci dozvědět:<?php try { throw new Exception("Nefatální chyba"); } catch (Exception $e) { trigger_error($e); } ?>
A tohoto „návrhového vzoru“ bude po zavedení překladu varování na výjimky potřeba čím dál tím víc. Tedy pokud si někdo bude dělat hlavu s tím, že ne všechny chyby, ke kterým dojde, musí být rovnou fatální.
Nechci ti fušovat do řemesla, ale tobě přijde bežné ignorovat chyby,
ať už interní nebo vlastní (opomenu-li E_NOTICE
, což máš ve
zvyku)? Chyba je přece od toho, aby programátora upozornila, že je něco
špatně a měl by to vyřešit než pošle aplikaci na produkční server, nebo
ne? Nevím, jestli jsem sám, ale přijde mi fakt dost divné vyhazovat někde
v aplikaci E_USER_WARNING
/NOTICE
jen tak pro srandu
králíkům, aby se to zalogovalo a nevšímat si toho…
- vrana
- Člen | 131
Majkl578
Chyby v programu je samozřejmě nutné eliminovat. Ale pořád tady je dost velká část externích chyb, kterým se vyvarovat nejde – spadne DB server, poškodí se tabulka, není k dispozici Twitter nebo třeba SOAP server. A na tyto chyby je nutné jednak nějak upozornit, ale stejně důležité je také je lokalizovat. Protože je zbytečné, aby třeba kvůli tomu, že je nedostupný Twitter, který zobrazuji v nějakém bočním panýlku (nebo se poškodila jedna tabulka v databázi), nefungovala celá aplikace. A výjimky mají tu mnohdy nepříjemnou vlastnost, že pokud je explicitně neošetřím ve správném kontextu, tak shodí celou aplikaci.
Napsal jsem o tom několik článků s rozsáhlými diskusemi a nechce se mi to opakovat tady. Začít jde třeba na http://php.vrana.cz/…-chybami.php
- Yrwein
- Člen | 45
vrana: Jenže obecné logování nemůže rozhodnout, která část programu je „nedůležitá“ a nesmí kvůli ní zahučet celá aplikace. To musí udělat programátor. Aneb není problém „nedůležitý“ blok kódu obalit try catch pro obecnou výjimku a to logovat (případně mít možnost říct widgetu (*) „seš nedůležitej, tak chytej výjimky, loguj a nepropaguj dál“) – spíše jde o programátorské návyky. Ale je problém, že logger nemůže (a imho ani nesmí) vědět, jestli je ta chyba opravdu závažná nebo není.
(*) Edit: Nebo kontejneru, který komponentu obsahuje a manipuje s ní.
Editoval Yrwein (30. 9. 2010 17:20)