PHP5 objektumok 1
Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók <?php class Book {?> private $isbn; public $title; function construct ($isbn, $title) { $this->isbn=$isbn; $this->title=$title; function get_isbn () { return $this->isbn; 2
A this változó -az objektum függvényeiben automatikusan elérhető és az objektumra mutat -az objektum változói illetve függvényei ezen keresztül érhetők el public, protected, private tulajdonságok -public bárhonnan elérhető -protected csak saját és származtatott osztály metódusaiból -private csak saját osztály metódusaiból: származtatott osztályokban újra deklarálható -ha nem adjuk meg egyik tulajdonságot sem, a változó: public -metódusokra is alkalmazhatóak 3
A static tulajdonság static $counter=0; -az ilyen változókat osztályváltozóknak is nevezzük a self és az osztálynév használata self::$counter Counter::counter counter.php countertest.php -a metódusok is lehetnek statikusak 4
Osztály konstansok: const const PIROS = "#FF0000"; const ZOLD = "#00FF00"; const KEK = "#0000FF"; color.php, colortest.php 5
Objektumok másolása -értékadásnál referencia jön létre $c1 = new Cloneable(1); $c2 = $c1; $c3 = clone $c1 ; -ha a másolat nem lehet pontos másolata az eredetinek: clone - a clone függvényben két kulcsszó áll rendelkezésünkre a $this (másolat) és $that (másolt objektum) cloneable.php, cloneabletest.php 6
Öröklődés -extends kulcsszó -nincs többszörös öröklődés - van interfész -a parent:: és self:: kulcsszavak -az instanceof operátor if ( $c1 instanceof Cloneable ) { elso.php elsotest.php 7
Elvont (absztrakt) osztály és függvény abstract kulcsszó -elvont osztály, ha van legalább egy elvont függvénye -az elvont függvényekhez nem lehet kódot definiálni csak felülíráskor abstract class AB { protected $a; public abstract function get_a (); function construct ($v) { $this->a=$v; abstractest.php 8
Interfészek -interface kulcsszó a definíciónál -az interfész definíciók csak függvény prototípusokat és konstansokat tartalmazhatnak -az implements kulcsszóval rendeljük őket az osztálydefiníciókhoz -az instanceof operátor alkalmazható interfészekre is -az interfészek függvényei mindig publikusak -több interfész implementálása esetén ezeknek nem lehet ugyanolyan nevű metódusuk -interfészek megvalósíthatnak interfészeket, többszörös öröklés megengedett A final módosító használható a nem felülírható függvények és osztályok esetében 9
Metódusok felülírása -más OO nyelveknél: metódusok felülírása, más szignatúrával -a PHP5 ilyent nem tud... -megoldás: function feladat ($s) { if ( is_string($s) ) { //első feladat elseif (is_int ($s)) { //második feladat elseif ( is_float($s) ){ //... és így tovább 10
Kivételkezelés try { //kód throw new FirstException("üzenet"); catch (FirstException e ) { catch (SecondException e) { finally { 11
A beépített kivétel osztály: class Exception { protected $message;//üzenet protected $code=0; //hibakód protected $file; //a kivétel forrásának neve protected $line; //a kivétel forrásának sora function construct([$message [,$code]]); final public getmessage(); final public getcode(); final public getfile(); final public getline(); final public gettrace(); final public gettraceasstring(); function tostring(); 12
felülírása: class MyException extends Exception { function construct ( $message ) { parent:: construct ($message;) -a legtöbb jelenlegi PHP függvény nem dob kivételt kompatibilitási meggondolás miatt ( PHP4-el) -a nyelv objektumainak metódusai sokszor rendes függvényként hívhatóak 13
Szkript programozást segítő megoldások -az autoload függvény -forrás állományszervezés, prepend.php autoload.php -automatikus paraméter típusellenőrzés function test ( Book $b ) { 14
Más speciális (bűvös - magic) függvények tostring () -a print és echo ezt hívja meg, ha implementálva van -egy sztringet kell visszaadnia, és automatikusan meghívódik ha sztring kontextusban használjuk az objektumot 15
Sorosítás a sleep() és wakeup() a sorosítást segíti function sleep () { return array ('cart'); -az unserialize() -t használó szkriptnek is meg kell kapni az objektum definícióját => autoload vagy include 16
A call, get, set függvények olyan függvények elérését engedik meg amelyeket nem definiálunk explicit módon: public function call ($m, $par) { echo "a $m függvényt hívták meg."; echo "A paraméterei:"; print_r($par); proxy.php 17
A get és set tulajdonság beállító és lekérdező függvények Mire jó? : public function get ($p) { return $this->$p; public function set($p, $v) { $this->$p = $v; A set nem létező tulajdonság esetén változót hoz létre storage.php 18
Betekintés az objektumokba $b->new Book(); if (method_exists ('show', $b)) { //... ; $methods=get_class_methods($b); $v=get_object_vars($b); $sv=get_class_vars('book'); 19
Példák Kosár ShoppingCart Shopping Űrlap: formtest.php 20