Dupa cum am promis cu mult timp in urma ca voi face tutoriale despre oop, mostenire si tratarea execeptiilor, astazi sper sa il termin pe cel de tratare a exceptiilor. asa ca sa trecem la treaba.
Conceptul de tratarea a exceptiilor este urmatorul: un set de instructiuni este rulat intr-un bloc try,
daca in interiorul acestui bloc ceva nu functioneaza corect atunci se va genera o exceptie. Voi folosi ca exemplu clasele create pana acum in tutorialele oop [1,2]. Acum voi mentiona ca in php exceptiile trebuie lansate manual aceasta se face prin cuvantul cheie throw dar restul o sa va clarific dupa ce modific codul
<?php class masina{ //datele membre ale clasei private $motor; private $putere; private $masina; //constructorul clasei public function masina(){ $this->motor=1.0; $this->putere='20cp'; $this->masina='golf'; } //metoda ce schimba tipul motorului, editata pentru tratarea exceptiilor public function modifica_motor($motor_){ try{ throw new Exception ("Capacitatea cilindrica a motorului trebuie sa fie un numar <br>"); }else{ $this->motor=$motor_; } }catch(Exception $tip){ echo " A aparut o exceptie la linia ".$tip->getLine()." cu mesaju: ".$tip->getMessage(); } } //metoda de schimbare a puteri motorului public function modifica_putere($putere_){ $this->putere=$putere_; } //metoda de schimbare a tipului masini public function modifica_masina($masina_){ $this->masina=$masina_; } //metoda afisare a masini,motorului si puterea public function toString(){ echo 'Masina: '.$this->masina.'<br> Motor: '.$this->motor.'<br> Putere:'.$this->putere.'<br>'; } } //declaram obiectul clasei $ob=new masina(); //afisam masina dupa ce am apelat constructorul $ob->toString(); //setam o noua masina $ob->modifica_masina("Passat"); //setam un nou motor $ob->modifica_motor("ionica");//aici observam ca va fi generata si tratata exceptia //setam o noua putere pentru masina $ob->modifica_putere("180cp"); //afisam noua masina $ob->toString(); ?>
Daca va uitati atent o sa constatati ca dupa blocul try vine un alt bloc catch care trateaza exceptia asa
ca va spun sa fiti atenti deoarece nu se poate bloc try fara catch, fara nici un catch nu se poate, dar cu
mai multe blocuri se poate.
Eu am folosit clasa Exception care este o clasa predefinita, dar puteti sa va definiti o clasa chiar voi care
sa trateze execeptiile , sau puteti sa o extindeti pe cea deja existenta, pentru incepatori e suficient atat, pe parcurs o sa va definiti propriile clase, pan atunci sa vedem rezultatul.
Masina: golf Motor: 1 Putere:20cp A aparut o exceptie la linia 22 cu mesaju: Capacitatea cilindrica a motorului trebuie sa fie un numar Masina: Passat Motor: 1 //aici am pus ionica, va amintiti? Putere:180cp
Dupa cum vedeti in blocul try daca nu sa primit un numar sa lansat exceptia din blocul catch ( se poate
lansa o alata exceptie din catch)
Ca sa nu uit : constructoul clasei exception primeste 2 paramatri care sunt optionali, un mesaj de eroare si
un cod mai sus cred ca ati observat este pus doar un mesaj de eroare.
Bafta pana data viitoare, la urmatorul tutorial
Acest tutorial este scris de mine si nu paote fi distribuit decat cu acordul meu si precizarea sursei