Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z wyjątkami
Fred1485
post
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


Witam, od razu do rzeczy:

  1. <?php
  2.  
  3. class newException extends Exception { // na potrzeby moich prób druga klasa obsługująca wyjątki
  4. private $code2 = 'Brak kodu';
  5.  
  6. function get() {
  7.  
  8. return $code2;
  9. }
  10. }
  11. require_once('lib/Twig/Autoloader.php');
  12.  
  13. Twig_Autoloader::register();
  14.  
  15. $loader = new Twig_Loader_Filesystem('templates');
  16. $twig = new Twig_Environment($loader, array( 'auto_reload' => true, 'cache' => 'cache')); //tutaj korzystam z TWIGA ale to nie ma nic do rzeczy
  17. $template = $twig->loadTemplate('index.html');
  18.  
  19. //dane do bazy
  20.  
  21. try {
  22.  
  23. $database = @new mysqli(HOST, USER, PASSWORD, DATABASE);
  24.  
  25. if($database->connect_errno) {
  26.  
  27. throw new Exception($database->connect_error, $database->connect_errno);
  28. }
  29. if(!$database->set_charset("utdf8")) {
  30.  
  31. throw new newException('Błąd wyboru kodowania zapytań!');
  32.  
  33. }
  34.  
  35. }
  36.  
  37.  
  38. catch(Exception $error) {
  39.  
  40. echo $template->render(array('text' => $error->getMessage(), 'code' => $error->getCode()));
  41. }
  42. catch(newException $error) {
  43.  
  44. echo $template->render(array('text' => $error->getMessage(), 'code' => $error->get()));
  45.  
  46. }
  47.  
  48. ?>


Skrypt działa jak natura chciała wink.gif Tylko jest problem w tym miejscu:

  1. catch(Exception $error) {
  2.  
  3. echo $template->render(array('text' => $error->getMessage(), 'code' => $error->getCode()));
  4. }
  5. catch(newException $error) {
  6.  
  7. echo $template->render(array('text' => $error->getMessage(), 'code' => $error->get()));
  8.  
  9. }


Zauważcie że jak podam złe dane do bazy to pieknie zostanie obsłużony wyjątek, przecież o to chodzi, ale jeśli specjalnie zmienię tryb kodowania żeby sprawdzić czy klasa newException zostanie wywołana do obsługi tego błędu to już niestety nie działa bo zamiast funkcja catch złapać klasę newException to ona łapię klasę Exception sad.gif

Niby logiczne bo ta klasa dziedziczy po Exception... Jeśli usunę catch z klasą Exception i zostawię samo newException to wszystko pięknie działa! Jest na to jakiś sposób?

P.S Mam nadzieję że zrozumieliście mnie bo trochę pomieszałem biggrin.gif


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 11:36