Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyjątki a error_handler z php4
Forum PHP.pl > Forum > PHP > Object-oriented programming
Balin
Chciałbym rozpocząć tutaj dyskusje na temat użyteczności wyjątków i ich wyższości nad set_error_handler z php4, dlaczego wyjątki są lepsze, na czym polega ich wyższość ?
hawk
Sugeruję rozwinięcie tematu i rozpoczęcie od wyjaśnienia, dlaczego uważasz jedno za lepsze od drugiego. Ja np. uważam je za inne, i nie wiedzę jak jedno ma się do drugiego. To jest sugerowanie odpowiedzi mad.gif.
Balin
Ok, wiec do czego najlepiej nadaja sie wyjatki, moje pytanie zostalo tak sformulowane poniewaz nie jestem obeznany z tematem wyjatkow i chcialem sie cos niecos na ten temat dowiedziec.
hawk
Hmm, wyjątki najlepiej nadają się do obsługi sytuacji wyjątkowych. Kiedy nie można kontynuować już tego co się właśnie robiło. I kiedy kod, który rzuca wyjątek, nie może nic sensownego z nim sam zrobić. Typowym przykładem jest biblioteka funkcji, która nie może przecież sama obsługiwać wyjątków i wywalać komunikatów o błędach, z racji tego właśnie że jest biblioteką.

Generalnie o wyjątkach można książki pisać. Temat rzeka, tak jak samo OOP. Polecam przyjrzenie się np. bibliotekom Javy, które są świetnym przykładem.
Ozzy
Jak dla mnie wyjątki należy zostawić Javie, a w php używać errorhandlerów, w przeciwnym wypadku będzie trzeba używać i obslugi wyjątków i błędów, co się chyba mija z celem...
bamboos
No właśnie. Bardzo interesuje mnie temat wyjątków. Zresztą bardzo chciałbym wreszcie poznać nowe udogodnienia php5! Mniej więcej rozumiem jak działają wyjątki:
  1. <?php
  2. class samochod
  3. {
  4. public $samochod;
  5.  
  6. public function start($mojsamochod) {
  7. if ( $this -> samochod != $mojsamochod ) {
  8. throw new Exception(&#092;"Nie mam takiego samochodu.\");
  9. } else {
  10. echo &#092;"Samochód $mojsamochod wystartował...\";
  11. }
  12. }
  13. }
  14.  
  15. $ford = new samochod;
  16. $ford -> samochod = 'mustang';
  17.  
  18. try {
  19. $ford -> start('mondeo');
  20. } catch (Exception $blad) {
  21. echo $blad -> getMessage();
  22. }
  23. ?>

No i wszystko gra, nie ten samochód i błąd jest reportowany. ale...
  1. <?php
  2. class samochod
  3. {
  4. public $samochod;
  5.  
  6. public function start($mojsamochod) {
  7. if ( $this -> samochod != $mojsamochod ) {
  8. echo &#092;"Nie mam takiego samochodu.\";
  9. } else {
  10. echo &#092;"Samochód $mojsamochod wystartował...\";
  11. }
  12. }
  13. }
  14.  
  15. $ford = new samochod;
  16. $ford -> samochod = 'mustang';
  17. $ford -> start('mondeo');
  18. ?>

Daje taki sam rezultat, więc po co bawić się w to wszystko, jak potem wykożystywanie takiej klasy jest łatwiejsze? W jakich sytuacjach należy kożystać z wyjątków i czy to wogule jest potrzebne, bo jak narazie nie widze w tym za bardzo sensu?
Z góry dzięki za pomoc!
silent
Prosty przykład - połączenie z bazą danych, wybranie rekordów i wyświetlenie ich. W przypadku wyjątków wstawiasz taki blok do try{ } i masz z głowy, a w przypadku Twojego drugiego sposobu przy każdym poleceniu musisz wstawiać if'a żeby sprawdzić czy czasem nie wystąpił błąd. Tak ja to widzę, mogę się mylić smile.gif.
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.