Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyjątki klika pytan
acztery
post
Post #1





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mysz
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

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


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 :)

Ten post edytował mysz 15.12.2006, 10:45:06
Go to the top of the page
+Quote Post

Posty w temacie


Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 11:26