Bevezetés

Bevezetés --  a PEAR alaposztály használata (destruktorok, hibakezelés)

Áttekintés

require_once "PEAR.php";
class classname extends PEAR { ... }

Leírás

A PEAR alaposztály a legtöbb PEAR csomag által használt funkcionalitásokat nyújtja. Alapesetben a leszármazottait használjuk, soha nem hozunk létre példányokat közvetlenül a PEAR osztályból.

Az osztály legfőbb szolgáltatásai a következők:

PEAR "destruktorok"

Ha egy osztályt a PEAR osztályból származtatunk, (legyen az osztály neve például ClassName), definiálhatunk benne egy metódust _ClassName néven (az osztály neve egy hangosközzel bevezetve), ami automatikusan meghívásra fog kerülni a kérés lefutása után. Ez nem egy "valós" destruktor, mivel ha egy objektumot "törlünk", a destruktorban megadott kód nem fog lefutni. A PHP hívja meg a destruktort, ha végzett a futtatással. Lásd az alábbi példát.

Fontos!

A destruktorok megfelelő működéséhez az osztályt az "=& new" operátorral kell létrehozni, a következő módon:
$obj =& new MyClass();

Ha csak "= new" -t használnánk, a PEAR shutdown-listájában regisztrálásra kerülő objektum csak az eredeti objektum egy másolata lenne (a létrehozás utáni állapotban), és ennek a másolatnak a destruktora kerülne meghívásra a kérés lefutása után.

PEAR hibakezelés

A PEAR alaposztály lehetővé teszi, hogy sokkal komplexebb hibákkal térjünk vissza, mint egy egyszerű true/false érték, vagy hibakód. A PEAR-ben keletkező hiba mindig egy objektum, ami a PEAR_Error osztálynak, vagy egy leszármazottjának egy példánya.

A PEAR hibaobjektumainak egyik tervezési kritériuma volt, hogy egy bekövetkező hiba se kerüljön automatikusan kiírásra a felhasználónak, minden hibának lekezelhetőnek kell lennie anélkül, hogy bármilyen kimenete lenne. Ez teszi lehetővé a hibák elegáns kezelését, akkor is, ha a kimeneti formátum nem HTML (például WML, vagy más XML formátum).

A hibaobjektum többféleképpen konfigurálható - több dolgot is csinálhat létrehozásakor, például kiírhat egy hibaüzenetet, kiírhatja a hibaüzenetet és kiléphet, kiválthat egy hibát a PHP trigger_error() függvényével, meghívhat egy callback fügvényt, vagy a fentiek közül mindegyiket elhagyhatja. A kívánt viselkedést tipikusan a PEAR_Error konstruktorában specifikáljuk, de minden paraméter opcionális, és beállíthatunk alapértelmezett értékeket is, amelyek érvényesek lesznek minden objektumra, ami a PEAR osztályon alapul. Lásd a "PEAR error" példák című fejezetet a használat megértéséhez és a PEAR_Error referenciát a részletekhez.

Példák

Az alábbi példa bemutatja, hogyan használhatjuk a PEAR emulált destruktorait egy egyszerű osztály megvalósításához, ami egy fájl tartalmát tárolja, hozzá tud fűzni adatot az objektumhoz, és visszaírja az adatot a fájlba a kérés végén:

Megjegyzés: A PEAR "destruktorai" a PHP shutdown callback-jeit használják (register_shutdown_function()). A PHP < 4.1 verzióiban nem írhatunk a kimenetre belőlük ha webszerveren futtatjuk a kódot. Bármi, ami a "destruktor"-ban kiírásra kerül, elvész, kivéve, ha a PHP-t parancssori módban használjuk (CLI). PHP 4.1-ben és afölött már a destruktor is generálhat kimenetet.

Ezen kívül lásd a figyelmeztetést arról, hogy hogyan kell létrehozni az objektumokat amennyiben használni szeretnénk a konstruktorukat.

A következő példák illusztrálják a PEAR hibakezelési mechanizmusának különböző lehetséges módjait.

Ez a példa egy wrapper az fsockopen() függvényhez, amely az fsockopen által visszaadott hibakódot és hibaüzenetet "csomagolja be" egy PEAR hibaobjektumba. Figyeljük meg, hogy a PEAR::isError() függvényt használjuk annak vizsgálatára, hogy az objektum egy PEAR hibaobjektum-e.

A PEAR_Error működési módja ebben a példában egyszerűen a hibaobjektum visszaadása, a többi a felhasználóra (fejlesztő) marad. Ez az alapértelmezett mód.

A következő példákban bemutatjuk, hogyan használjuk az alapértelmezett módokat:

Itt először beállítjuk az alapértelmezet módot a PEAR_ERROR_DIE-ra, és mivel nem adunk meg semmilyen egyéb módot a raiseError hívásban (harmadik paraméterként), ezért a raiseError az alapértelmezett hibamódot alkalmazza és megállítja a szkript futását, ha az fsockopen hibával tér vissza.

Felhasznált globális változók

A PEAR osztály néhány globális változót használ a globális alapértelmezések és egy objektumlista tárolására (utóbbit a destruktorok kezeléséhez). Minden globális változó amely a PEAR osztállyal áll kapcsolatban, a _PEAR_ prefixet kapta.

$_PEAR_default_error_mode

Ha nincs alapértelmezett mód beállítva egy objektumon belül, ez a mód lesz érvényes. A következő konstansok egyikének kell lennie: PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE or PEAR_ERROR_CALLBACK.

Ne állítsuk ezt a változót közvetlenül, hívjuk helyette a PEAR::setErrorHandling() metódust statikusan, a következőképpen:

$_PEAR_default_error_options

Ha a hibamód PEAR_ERROR_TRIGGER, ez a kiváltandó hiba szintje (lehetséges értékei E_USER_NOTICE, E_USER_WARNING vagy E_USER_ERROR).

Ne állítsuk a változó értékét közvetlenül, hívjuk helyette a PEAR::setErrorHandling() metódust statikusan, a következőképpen:

$_PEAR_default_error_callback

Ha nem használjuk az options paramétert hiba kiváltásakor és a hibamód PEAR_ERROR_CALLBACK, akkor ennek a változónak az értéke lesz callback-ként használatos. Ez azt jelenti, hogy ideiglenesen megváltoztathatjuk a hibamódot, és visszatérhetünk callback módra anélkül, hogy a függvényt újból meg kellene neveznünk. Sztring típusú értékkel hivatkozhatunk egy függvényre, míg egy kétdimenziós tömb egy objektummal (0-s index) és egy sztringgel (1-es index) egy objektum egy metódusát jelenti.

Ne állítsuk a változó értékét közvetlenül, hívjuk a PEAR::setErrorHandling() metódust statikusan, a következőképpen:

A következő példa szemlélteti, hogyan kapcsolgathatunk oda-vissza a callback függvény újbóli megadása nélkül: