IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Martin Konečný (pavelco1998):5.2.2014 13:31

Ahoj,

lze nějak zachytit více výjimek najednou, když pro zpracování každé z nich použiji stejný script? Vím, že lze zachytit jejich předka, ale to v mém případě nemohu.

Odpovědět
5.2.2014 13:31
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Hartinger:5.2.2014 14:17

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.

Nahoru Odpovědět
5.2.2014 14:17
New kid back on the block with a R.I.P
Avatar
Martin Konečný (pavelco1998):5.2.2014 14:27

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

Editováno 5.2.2014 14:28
Nahoru Odpovědět
5.2.2014 14:27
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Hartinger:5.2.2014 14:32

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("...");
  }
}
Editováno 5.2.2014 14:32
Nahoru Odpovědět
5.2.2014 14:32
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Martin Konečný (pavelco1998):5.2.2014 14:37

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.

Nahoru Odpovědět
5.2.2014 14:37
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Hartinger:5.2.2014 14:42

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

Nahoru Odpovědět
5.2.2014 14:42
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Martin Konečný (pavelco1998):5.2.2014 14:47

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.

Nahoru Odpovědět
5.2.2014 14:47
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Zdeněk Pavlátka:5.2.2014 14:49

Stačí použít jeden typ a rozdílnou message.

Nahoru Odpovědět
5.2.2014 14:49
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Martin Konečný (pavelco1998):5.2.2014 14:54

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.

Nahoru Odpovědět
5.2.2014 14:54
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.