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: 1function foo() 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: 13 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0