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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0