Jak rozlišit Exception v PHP

Marek

Jak rozlišit Exception v PHP
« kdy: 30. 10. 2013, 04:04:52 »
Ahoj, jde prosím nějak rozlišit chybová zpráva při použití throw new Exception()? třeba nějakým parametrem, na který by šla udělat podmínka v catch?

Kód: [Vybrat]
try{
   throw new Exception('Zpráva o chybě!', 'a'); //tohle takto samozřejmě nefunguje :(
}catch(Exception $e){
   if($chyba == 'a')
      echo $e->getMessage();
   elseif($chyba == 'b')
      echo 'Vypíšu něco jiného';
   elseif($chyba == 'c')
      echo 'Vypíšu zcela něco jiného';
}

Děkuji za pomoc


TTTTTTT

Re:Jak rozlišit Exception v PHP
« Odpověď #1 kdy: 30. 10. 2013, 04:29:51 »
Vhodný postup je vytvořit si vlastní třídu, která dědí od Exception. Viz třeba http://interval.cz/clanky/oop-v-php-vyjimky-v-oop/ (pozor, je to prastaré)

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak rozlišit Exception v PHP
« Odpověď #2 kdy: 30. 10. 2013, 05:07:10 »
Udělej si vlastní třídu pro výjimku/výjimky, dědící od Exception. Je to normální třída, takže si tam můžeš přidat vlastnosti/parametry jak je libo.

Potom můžeš mít více Catch bloků na základě typu dané Exception nebo podobnou rozhodovací strukturu jak jsi napsal na základě nějaké Tvojí vlastnosti.

Marek

Re:Jak rozlišit Exception v PHP
« Odpověď #3 kdy: 30. 10. 2013, 11:06:43 »
Díky za pomoc, ale takovou třídu napsat nesvedu, za současného stavu to tedy není nijak možné? Stačí mi jen rozlišit 2 chyby- Děkuji

narg

Re:Jak rozlišit Exception v PHP
« Odpověď #4 kdy: 30. 10. 2013, 11:35:27 »
Viz. dokumentace k Exception:
http://www.php.net/manual/en/class.exception.php

parametr $code

Ale opravdu je to prasarna ;-)


BoneFlute

  • *****
  • 2 000
    • Zobrazit profil
Re:Jak rozlišit Exception v PHP
« Odpověď #5 kdy: 30. 10. 2013, 15:05:20 »
Díky za pomoc, ale takovou třídu napsat nesvedu, za současného stavu to tedy není nijak možné? Stačí mi jen rozlišit 2 chyby- Děkuji

Co na tom nesvedeš? Vždyť snad všichni programátoři, nutno poznamenat, že bohužel, umí dědit.

Kód: [Vybrat]
class ServiceException extends RuntimeException {}
class ValidationException extends RuntimeException {}

Druhý způsob je použití parametru code výjimky (to je to, co tam cpeš jako 'a', což se předpokládám přetypuje na 1).
Ale pokud je to logické rozdělení chování, tedy například chybu udělala služba:
Kód: [Vybrat]
throw new ServiceException(), nebo chybu způsobil uživatel špatným vstupem:
Kód: [Vybrat]
throw new ValidationException() preferoval bych rozdělení do více tříd.

Dobrý zdroj použití výjimek je například: http://latrine.dgx.cz/php-triky-standardni-vyjimky

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak rozlišit Exception v PHP
« Odpověď #6 kdy: 30. 10. 2013, 15:09:03 »
Díky za pomoc, ale takovou třídu napsat nesvedu, za současného stavu to tedy není nijak možné? Stačí mi jen rozlišit 2 chyby- Děkuji

WHAT THE FUCK????

Ne, sorry, ale


//takto se definuji tridy - kazda by mela jit do samostatneho souboru
class MyExceptionOne extends Exception { }
class MyExceptionTwo extends Exception { }

//funkce nekde v kodu ktera strili vyjimky
function callCodeWhichThrowsException() {
     if (...) {
          throw new MyExceptionOne();
     } else {
          throw new MyExceptionTwo();
     }
}

//jina funkce ktera na vyjimky reaguje
function someExceptionWillBeCatched(){
     try {
          callCodeWhichThrowsException();
     } catch (MyExceptionOne $e){
          ... //reakce na vyjimku MyExceptionOne
     } catch (MyExceptionTwo $e) {
          ... //reakce na vyjimku MyExceptionTwo
     }
}


přece není nic těžkého. Jak udělat třídu, která dědí od nějaké jiné, musí být přece v každé knížce PHPčka :-/ .

Marek

Re:Jak rozlišit Exception v PHP
« Odpověď #7 kdy: 03. 11. 2013, 16:48:47 »
To co jsi tu nepasl nemá ani hlavu ani patu... Nechápu jak někdo může radit, když v tom sám plave!

Natix

Re:Jak rozlišit Exception v PHP
« Odpověď #8 kdy: 03. 11. 2013, 19:10:27 »
To co jsi tu nepasl nemá ani hlavu ani patu... Nechápu jak někdo může radit, když v tom sám plave!

 ::)

nextsux

Re:Jak rozlišit Exception v PHP
« Odpověď #9 kdy: 03. 11. 2013, 19:17:07 »
2Marek: a co presne bys eMko-vi v te jeho odpovedi vytknul? Celkem by me to zajimalo, protoze odpoved povazuji za dost vycerpavajici

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak rozlišit Exception v PHP
« Odpověď #10 kdy: 03. 11. 2013, 21:26:44 »
Marek: Co konkrétně potřebuješ vysvětlit? (Tedy vyjma základů objektové orientace a programování obecně, na to Ti můžu doporučit knihy nebo studium, protože je to příliš obsáhlé téma do fóra.)

Upřímně, nechápu, jak můžeš říct, že v tom plavu. Programováním se živím, byť již dlouhou dobu ne PHPčkem (a nijak se mi po něm nestýská), a takovéto věci jsou pro mne denní chleba.

Je-li ta moje odpověď příliš stručná, ptej se dál - od toho fóra jsou a žádný učený z nebe nespadl. Tím, že se ve vývoji SW pohybuji již 15 let, můžu vynechat nějakou věc, kterou já považuji za zcela zřejmou, ale kvůli které Ti to nebude dávat smysl, protože pro Tebe jako začátečníka zřejmá není.