Diskuze: Zachycení více výjimek najednou
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Více najednou těžko, specifikuj co chceš udělat. Dá se dát více catch bloků za sebe, chytat předka nebo balit výjimky do sebe.
Pokusím se udělat velmi jednoduchý příklad:
try {
if (podmínka) {
throw new InvalidArgumentException("výjimka č. 1");
}
if (jiná podmínka) {
throw new OutOfRangeException("Výjimka č. 2");
}
} catch (/* zde bych potřeboval zachytit oba dva typy výjimek */) {
// script je pro oba typy výjimek stejný
errorMessage($e->getMessage());
redirect("...");
}
Nechci psát stejný kód tolikrát, kolik druhů výjimek zachytím. Přes společného předka "Exception" to zachytit nemohu (zkouším to v Nette FW a catch(\Exception) mi zachytí to, co nechci).
To je úloha na společného předka. Ty výjimky co chytáš žádného nemají? Podívej se jestli z něčeho ještě nedědí. Pokud ne, je to divné, ale pořád to jde. Můžeš udělat něco jako:
try {
if (podmínka) {
throw new InvalidArgumentException("výjimka č. 1");
}
if (jiná podmínka) {
throw new OutOfRangeException("Výjimka č. 2");
}
} catch (\Exception $e) {
if ($e instanceof InvalidArgumentException || $e instanceof OutOfRangeException) {
errorMessage($e->getMessage());
redirect("...");
}
}
Děkuji za radu, tento způsob mě nenapadl. Společného předka mají až základní \Exception. Asi bude nejlepší, když jim udělám společného předka sám.
Ona je otázka, jestli je potřeba vyhazovat tolik typů výjimek. Já v celé aplikaci většinou vyhazuji jen UserException, což je když uživatel něco zadá špatně. Jen tuhle chybu mu potom ukazuji, takže by to mělo být bezpečné.
Nejspíš bude stačit používat jen jeden typ. Jen jsem se snažil být co
nejpřesnější k typu chyby.
Ještě jednou díky.
Stačí použít jeden typ a rozdílnou message.
Message mám stejnou, ale byly dva druhy důvodů vyhození výjimky, tak jsem nepoužil stejný typ. Udělám jim nějakého společného předka.
Zobrazeno 9 zpráv z 9.