Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Čápka: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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Čápka: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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
David Čápka: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  +1 5.2.2014 14:42
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
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
Zdeněk Pavlátka
Tým ITnetwork
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.