Co kdyby se E_WARNING převáděly na výjimky?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kaja47
Člen | 16
+
0
-

Ono by spíš bylo lepší, kdyby se chování dalo vypnout pro externí knihovny u kterých si nejsme jisti, jak moc byl autor důsledný. A pro vlastní kód je povolit. To by mohlo přesvědčit několik nevěřících, nebo ne?

David Grudl
Nette Core | 8227
+
0
-

Že by Nette jen předbíhalo vývoj PHP? http://wiki.php.net/…s_exceptions

mlady
Člen | 24
+
0
-

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 :)

Panda
Člen | 569
+
0
-

S tím předbíháním to asi nebude zas tak horké…

Request for Comments: Exceptions instead of Errors

Version: 1.0
Date: 2009–07–24

Blizzy
Člen | 149
+
0
-

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
+
0
-

Používám Strict Mode – pokud by měli existovat dva „módy“…

  1. Immediate Death
  2. 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
+
0
-

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

PJK
Člen | 70
+
0
-

Per to tam, žádný sraní s mladou paní, někdo PHP a ty jeho dilettantes musí naučit slušnému programování

Majkl578
Moderator | 1364
+
0
-

vrana napsal(a):

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

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…

pekelnik
Člen | 462
+
0
-

Tento návrhový vzor (sic!) je skutečně hovadina :)

Filip Procházka
Moderator | 4668
+
0
-

Majkl578 +1

pekelnik
Člen | 462
+
0
-

Určitě by bylo příjemné mít nožnost nastavit úroveň konvertovaných chyb… v případě nynějšího „striktního módu“ tedy všchny chyby včetně E_DEPRECATED a E_NOTICE.

vrana
Člen | 131
+
0
-

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
+
0
-

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)