Autor | Zpráva | ||
---|---|---|---|
Amunak Profil |
Co je lepší použít,
trigger_error(); /* nebo */ throw ? Když používám trigger_error v objektech, je to chyba? Co ve funkcích nebo neobjektovém kódu, mám si stejně dělat třídu exception?
|
||
Nox Profil |
#2 · Zasláno: 6. 6. 2012, 08:41:59
Záleží jak s tím chceš pracovat, v OOP jsou celkem standardem výjimky, i když ta práce s nimi je trošku jiná.
Vyhození chyby navíc asi nejde zpracovat nějak lokálně, to bys spíš musel řešit návratovým kódem nebo nějakým globálním error flagem. Takže nebudeš moct specificky reagovat na daném místě, jenom to nějak exne. Volil bych exceptiony. |
||
Jan Tvrdík Profil |
#3 · Zasláno: 6. 6. 2012, 12:41:45
Amunak:
To jsou dost rozdílné věci. Vyhození výjimky okamžitě zastaví provádění následujícího kódu, zatímco po vyhození chyby se obvykle pokračuje ve zpracování dál. |
||
Amunak Profil |
#4 · Zasláno: 6. 6. 2012, 14:42:07
Nox:
Normálně vyhazuju chybu kde se mi chce, a pak to chytám přes set_error_handler. Jan Tvrdík: Ano, ovšem pokud tu výjimku pak chytáš, tak dosáhneš stejného výsledku. Jediný rozdíl který tam pak je je ten, že výjimky musím chytat na několika místech (a třeba i každou nějak jinak), kdežto error handler jednou nastavím a je hotovo. Proto přemýšlím, co z toho je třeba do budoucna výhodnější. A jestli je velká prasárna používat v obejktech trigger_error místo throw. |
||
Tori Profil |
#5 · Zasláno: 6. 6. 2012, 14:51:15
Subjektivně: Mezi chybou a výjimkou vidím docela rozdíl. Chybou (E_USER_NOTICE) říkám: „Náhodou nemáte překlep tady? Zkontrolujte si to pro jistotu. Ale jako jinak se nic neděje, skript pokračuje bez problémů dál.“, kdežto výjimka je spíš: „Tady je nějaký nečekaný problém. Možná to je překlep, ale já to neumím opravit ani rozhodnout co s tím, takže to posílám vejš a ať si to tam vyřeší.“
|
||
Jan Tvrdík Profil |
#6 · Zasláno: 6. 6. 2012, 15:41:40
Amunak:
Dobrá, dám ti příklad: function foo() { echo "A"; trigger_error("Něco je rozbité"); echo "B"; } function bar() { echo "A"; throw Exception("Něco je rozbité"); echo "B"; } Zatímco volání funkce foo vypíše AB , tak volání funkce bar vypíše pouze A .
|
||
Časová prodleva: 11 let
|
0