10.2. fejezet¶
A fejezet anyaga¶
Kivételkezelés¶
A kivétel fogalma¶
A programvégrehajtás során bekövetkezhet olyan nem várt esemény, amely meggátolja a program futását az adott blokkban. PHP-ban ebben az esetben úgynevezett kivétel dobódik.
Példa: A nullával való osztás egy DivisionByZeroError típusú kivételt eredményez
1 2 3 4 | |
A kód kimenete
Fatal error: Uncaught DivisionByZeroError: Division by zero in C:\xampp\htdocs\test.php:2 Stack trace: #0 {main} thrown in C:\xampp\htdocs\test.php on line 2
PHP-ban kétféle kivételtípust különböztetünk meg:
- az
Error-ok belső PHP hibákat reprezentálnak - az
Exception-ök programozói hibákat jelölnek.
Az Error és az Exception osztályok mindketten a Throwable interfészt valósítják meg, amely minden PHP-beli kivétel közös interfésze. A beépített kivételek az Error vagy az Exception osztályokból származnak. Ezt a hierarchiát szemlélteti az alábbi ábra.
Kivétel dobása¶
A throw utasítással mi magunk is dobhatunk manuálisan egy kivételt. A throw kulcsszó után meghívjuk annak a kivételosztálynak a konstruktorát, amilyen típusú kivételt el szeretnénk dobni. PHP-ban (Javával ellentétben) sehol sem kell jelezni a kivételdobást.
1 2 3 | |
A kivételosztály példányosításakor a konstruktornak átadhatunk egy szöveget is paraméterben, ekkor ez lesz a kivétel üzenete (hibaüzenet).
1 2 3 | |
Kivételek kezelése¶
Ha a programban valahol egy kivétel el lett dobva, akkor azt el is tudjuk kapni. PHP-ban a kivételkezelésre a try, catch és finally utasításokat használjuk, a Javához hasonló módon.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Több catch ág esetén a legelső olyan fog lefutni, amely a dobott kivétel típusára illeszkedik.
Példa: Írjunk egy osztás függvényt, amely két egész paramétert vár ($a és $b), visszatérési értéke pedig az $a/$b hányados! Ha nem egész típusú paramétereket kapunk vagy ha nullával szeretnénk osztani, akkor dobjunk kivételt!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
A kód kimenete
2.5 Ejnye, nullával nem osztunk! --- Kivételkezelés vége. ---
Saját kivételosztályok¶
Ha szeretnénk, akkor PHP-ban akár saját kivételosztályt is írhatunk. A létrehozni kívánt kivételosztályt valamely létező kivételosztályból kell örököltetnünk (jellemzően az Exception osztályból vagy annak valamelyik gyermekosztályából szoktunk öröklődni).
Példa: Saját kivételosztály írása
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
A kód kimenete
A pisztácia kifogyott!
