Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyłapywanie błędów, która z metod jest lepsza?
Forum PHP.pl > Forum > PHP
Zagiewa
Witam. Bawię się obsługą błędów w PHP i do tej pory poznałem dwie skuteczne metody problem w tym, że jedna choć bardzo często stosowana jest dość stara natomiast druga nowsza ale czy lepsza? no właśnie... Poniżej przedstawiam dwa przykładowe użycia tych dwóch metod.
  1. set_error_handler('error_msg');
  2.  
  3. function error_msg($err_type, $err_msg, $err_file, $err_line) {
  4.  
  5. $log_msg = "blad: " . $err_type . $err_msg . $err_file . $err_line;
  6. $log_path = "plik.txt";
  7. error_log($log_msg, 3, $log_path);
  8. }

  1. try {
  2.  
  3. //jakis tam sobie kod
  4. }
  5.  
  6. catch(PDOException $e) {
  7.  
  8. $error = "Day: " .date("d-m-Y"). " Hour: " .date("H:i:s"). "
  9. Error in file: " .$e->getFile(). "
  10. Line: " .$e->getLine(). " Message: " .$e->getMessage(). "
  11. ###############################################################\r\n";
  12.  
  13. //i zapis do pliku
  14. }

Obie metody robią to samo, wyłapują błąd i zapisują do pliku jednak czy któraś jest lepsza? Którą powinienem stosować? Od razu wspomnę, że wiem o tym, że za pomocą error_reporting() tworzy się tzw. error handler czy jakoś tak jednak można to wykorzystać przy obu metodach.
vermis
Mylisz się te metody nie robią tego samego.
error_handler pozwala na przechwycenie błędów wykonania, np. o nieistniejącej zmiennej.
A try-catch służy do przechwytywania wyjątków, w Twoim przypadku są to tylko wyjątki typu PDOException, które rzuca klasa do PDO.
Rzucanie wyjątków jest obsługiwane przez programistę, a nie parser jak ma to miejsce przy error_handler.
Zagiewa
W sumie masz racje. Od początku wiedziałem, że blok try/catch służy do wyłapywania wątków jednak w ten sposób udało mi się zrobić prosty dziennik błędów, a przynajmniej tak tylko mi się wydawało tzn. gdy błąd pojawiał się w PDO to od razu był zapisywany w dzienniku jednak po przeczytaniu Twojego postu zrobiłem literówkę w zmiennej, a dziennik pozostał pusty aż się dziwie, że wcześniej o tym nie pomyślałem smile.gif Idąc jednak tym śladem warto zastosować error_handler do wyłapywania błędów i try/catch do błędów PDO?

Da się uruchomić metodę wewnątrz set_error_handler() ? bo funkcję:
  1. function error_msg($err_type, $err_msg, $err_file, $err_line)

chciałbym zamienić na metodę w osobnej klasie a tylko wywoływać na każdej stornie set_error_handler() z tą metodą ale jak? próbowałem coś takiego:
  1. set_error_handler(a->error($err_type, $err_msg, $err_file, $err_line));

ale nie działa sad.gif da się to jakoś zrobić?
Eby
Set_error_handler używasz do wyłapywania błędów (oraz notice, warning itp) związanych z funkcjami php (lub wygenerowanymi przez użytkownika). Czyli gdy robisz echo $array['ne'], i array nie ma indexu ne, to możesz sobie to zalogować. Try/Cache możesz użyć do logowania wyjątków które są rzucane przez aplikację. Należy jednak pamiętać o tym, że wyjątki są rzucane po to by na nie reagować. Funkcja działająca podobnie do "set_error_handler" ale służąca do globalnego wyłapywania (nieobsłużonych) wyjątków to: set_exception_handler - może Ci się przydać.
Można użyć set_error_hender ze wskazaniem na obiekt np tak: set_error_handler(array($a, 'error')).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.