Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyjątki klika pytan
Forum PHP.pl > Forum > PHP > Object-oriented programming
acztery
az wstyd mi sie przyzbac ale całkowicie nie kapuje po co stosowac w ogole te całe wyjatki a przeczytalem artykulu i z phpedi wszysto kilka razy ale dalej nie wiem. Po co.. mozna urzywac elseif i mamy chyba to samo.

no

  1. <?php
  2. $sPath = './router.php';
  3. try {
  4. if( !file_exists( $sPath ) ) {
  5. throw new Exception( 'plik nie istnieje!' );
  6. }
  7.  
  8. include $sPath;
  9. if( !class_exists( 'Router' ) ) {
  10. throw new Exception( 'Klasa Router nie istnieje!' );
  11. }
  12.  
  13. $Router = new Router();
  14. }
  15. catch( Exception $Ex ) {
  16. echo 'Wystąpiły problemy!'."n";
  17. echo '',$Ex,'';
  18. }
  19. ?>


przeciez mozna to zrobic bez wyjatku prosto i szybko wiec po co wyjatek, nie chodzi tylko o ten przykład.

tak testuje sobie na swojej "pseudo" kodzie i mam takie cos


  1. <?
  2. $a = '453';
  3. try {
  4.  
  5.  
  6.  
  7. if( !is_numeric($a) ) {
  8. throw new Exception( '$a nie jest liczba' );
  9. }
  10.  
  11. if( $a >= '454' ) {
  12. throw new Exception( '$a jest większe lub równe 454' );
  13. }
  14.  
  15.  
  16. }
  17. catch( Exception $Ex ) {
  18. echo 'Wystąpiły problemy!'."n";
  19. echo $Ex;
  20. }
  21. ?>
naprzyklad chcial bym zrobic teraz tak ze jak podam liczbe wieksza niz 454 to $a automatycznie zostanie przypisane do np. 5 ( wtedy powiino nie zwracac bledow ) moze zle mysle. ale no na boga nie kapuje siedze juz testuje od paru godzin.
mysz
Funkcje powinny zwracać tylko takie wartości, jakie są oczekiwane. Np jeśli funkcja wykonuje dzielenie dwóch intów, to powinna zwrócić tylko i wyłącznie float. A jeśli ktoś jako parametry poda 5, 0? Nie da się dzielić przez 0, więc bez wyjątków musisz zwrócić False lub rzygnąć brzydkim błędem. Jeśli korzystasz z wyjątków, w przypadku drugiego parametru równego 0, rzucasz wyjątkiem. Wyglądałoby to tak:
  1. <?php
  2. function dziel($a, $b) {
  3. if ($b == 0) {
  4. throw new InvalidArgumentException('Pamiętaj cholero, nie dziel przez zero!');
  5. }
  6. return $a/$b;
  7. }
  8. try {
  9. print dziel(3, 0);
  10. } catch (InvalidArgumentException $e) {
  11. print $e->getMessage();
  12. }
  13. ?>


Oczywiście jest to pewne uproszczenie i tylko jeden aspekt, ale powinno wskazać Ci kierunek w jakim powinieneś iść poznając i stosując mechanizm wyjątków :)
athabus
aczteryhehe w takim przykładzie jak podałeś wyjątki faktycznie mają średni sens. Tu raczej chodzi o coś takiego żę

try
{
operacje na jakiś klasach/obiektach
}
catch (Exception $e)
{
obsługa wyjątków
}


Przy czym wyjątków nie wyrzucasz jawnie w bloku try tylko one są wyrzucane gdzieś w klasach. Koncepcja opiera się o to, że klasa/obiekt informuje że coś poszło nie tak wyrzucając wyjątek a ty w danym fragmencie kodu sam decydujesz co z tym fantem zrobić. Np. Błąd w odczycie bazy danych raz może być krytyczny i spowodować, że nie ma sensu dalej ciągnąć aplikacji tylko wyświetlić stronę błędu, a w innym miejscu ten sam błąd może np. nie być tak istotny i można podjąć działania (w bloku catch), które pozwolą na naprawienie sytuacji 'w locie'. Oczywiście to co tu piszę to bardzo duże uproszczenie. Kiedyś hwao miał bardzo fajny artykuł na ten temat na swoim blogu.

//edit mysz mnie uprzedził :-)
Sabistik
Cytat
Kiedyś hwao miał bardzo fajny artykuł na ten temat na swoim blogu.

http://wortal.php.pl/wortal/artykuly/proce...likacji/wyjatki
acztery
Cytat(Sabistik @ 15.12.2006, 10:51:33 ) *



czytałem to juz pisałem przeciez. 1 przykład to własnie z tego artykulu pochodzi .
yarpo
Ja zaproponowałbym:
--moderacja--
oraz:
--moderacja--
wookieb
Nie dość, że piszesz o tym samym co art wyżej to jeszcze odgrzebujesz zombiaki sprzed lat. Zamykam i nie odkopuj więcej tematów.
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.