Autor Zpráva
kajaman
Profil
Ahoj, prosím o radu. Mám jednu třídu, která volá metodu jiné třídy. Ve volané třídě se generují jakási data, např. z db, a vznikne tam nějaká výjimka. Tu bych měl odchytit bezprostředně za try blokem a ošetřit. Jak to mám udělat, když potřebuji tu hlášku (např. "špatné přihlašovací údaje") až v té volající třídě, ne v té volané.
Srigi
Profil *
class foo
{

  pokus = new bar();

  try {
    pokus->getDbData();
  } catch (Exception $e) {
    $message = $e;
  }

}


class bar
{

  public function getDbData()
  {
    ...
    ...
    ...
    if (nieco_sa_pokaslalo)
       throw new Exception("hlaska");


  }


}
srigi
Profil
Nie je to teda syntakticky uplne presne, ale principialne by to malo byt OK. Oprav si teda iba tie chyby syntaxe
pokus = new bar();
ma byt
$pokus = new bar();


$message = $e;
ma byt
$message = $e->getMessage
;
kajaman
Profil
děkuju, takže vidím, že catch nemusí jít bezprostředně za try blokem... kdyby třída "bar" volala další třídu (tj. už třetí), a chyba vznikla až v té třetí, bude to takhle?

class foo
{
  pokus = new foo2();

  try {
    pokus->nactiData();
  } catch (Exception $e) {
    $message = $e;
  }

}

class foo2 {

  public function nactiData(){
$bar = new bar();
try{
 $bar->getDbData();
}catch (Exception $e){
  throw new Exception $e;
}
  }


}

class bar
{
  public function getDbData()
  {
    ...
    ...
    ...
    if (nieco_sa_pokaslalo)
       throw new Exception("hlaska");
  }
}


panhuhu
Profil
try{
 $bar->getDbData();
}catch (Exception $e){
  throw new Exception $e;
}
je zbytečné, výjimku můžeš nechat probublat do foo. Záleží na tobě, kde chceš výjimku ošetřit.
kajaman
Profil
tak to je ovšem úplně super :)
všem díky za radu!
K.
srigi
Profil
Tak tak, vinimku mozes vyhodit lubovolne hlboko v kode a chytit si ju az na samom vrchu.

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: