1 / 29

A PHP 5 újdonságai

A PHP 5 újdonságai. Az OOP terén. Miről lesz szó?. Osztályok kezelése Új direktívák Konstruktor Destruktor Interfészek Kivételkezelés. Szóhasználat. Metódus Változó Tag változó Tag függvény Függvény Osztály Objektum Példány. Objektum referenciák. Régen – érték szerinti átadás

naif
Download Presentation

A PHP 5 újdonságai

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A PHP 5 újdonságai Az OOP terén

  2. Miről lesz szó? • Osztályok kezelése • Új direktívák • Konstruktor • Destruktor • Interfészek • Kivételkezelés

  3. Szóhasználat • Metódus • Változó • Tag változó • Tag függvény • Függvény • Osztály • Objektum • Példány

  4. Objektum referenciák • Régen – érték szerinti átadás • Most – referenciák használata • Mit befolyásol? • Értékadás • Függvény paraméterek

  5. class Gyumolcs {    var $suly = 0; } function erik($gyumolcs) {$gyumolcs->suly++; } $gyumolcs = new Gyumolcs(); erik($gyumolcs); echo "\nFügv: " . $gyumolcs->suly; $gy1 = $gyumolcs; $gy1->suly++; echo "\nÉrték: " . $gyumolcs->suly; Fügv: 0 Érték: 0 Objektum referenciák - Példa Fügv: 1 Érték: 2

  6. class Gyumolcs {    var $suly = 0; } function erik(&$gyumolcs) {$gyumolcs->suly++; } $gyumolcs = new Gyumolcs(); erik($gyumolcs); echo "\nFügv: " . $gyumolcs->suly; $gy1 = &$gyumolcs; $gy1->suly++; echo "\nÉrték: " . $gyumolcs->suly; Fügv: 1 Érték: 2 Objektum referenciák – Példa/1 Fügv: 1 Érték: 2

  7. Klónozás • A referenciák miatt szükséges • __clone() metódus • clone operátor • Funkció • Egyedi azonosítók • Erőforrások • $this – klón • $that – eredeti objektum • Ha nincs __clone()

  8. class Gepkocsi {    public $rendszam = 1;    public $szin;    function __clone() {        echo "\nklónozok...\n";var_dump($that);$this->rendszam = $that->rendszam + 1;    }    function kiir() {        echo "\nSzín: " . $this->szin . " Rendszam: " . $this->rendszam;    }} $g = new Gepkocsi();$g->szin = 'piros';$g1 = clone $g;$g->kiir();$g1->kiir(); klónozok... NULL Szín: piros Rendszam: 1 Szín: piros Rendszam: 1 PHP5.0.0RC1 hiba: $that értéke NULL Klónozás - Példa

  9. Információk elrejtése • Új láthatósági direktívák • public • protected • private • Metódusok és tagváltozók • Alapértelmezett: public • Régi kódolási konvenció: aláhúzás jel

  10. class Tavolsag {    private $tav;    function setKm($km) {$this->tav = $km;    }    function getKm() {        return $this->tav;    }    public function setMerfold($merfold) {$this->setKm($merfold * 1.609344);    }    function getMerfold() {        return $this->getKm() / 1.609344;    }} $d = new Tavolsag();$d->setKm(10);echo "\nMérföld: " . $d->getMerfold();echo "\nKm: " . $d->tav; Mérföld: 6.21371192237 Fatal error: Cannot access private property Tavolsag::$tav in … Információk elrejtése - Példa

  11. Absztrakció • Absztrakt metódusok • abstract • abstract class

  12. abstract class Kiadvany {    abstract function kolcsonoz($kinek);} class Konyv {    function kolcsonoz($kinek) {        echo "\nKönyv kölcsönzés: " . $kinek;    }} class Folyoirat {    function kolcsonoz($kinek) {        echo "\nFolyóirat kölcsönzés: " . $kinek;    }} $k = new Konyv();$k->kolcsonoz('nekem');$k = new Folyoirat();$k->kolcsonoz('nekem');$k = new Kiadvany();$k->kolcsonoz('nekem'); Könyv kölcsönzés: nekem Folyóirat kölcsönzés: nekem Fatal error: Cannot instantiate abstract class Kiadvany in … Absztrakció - Példa

  13. Egységesített konstruktorok • Régen: konstruktor egyezett az osztály nevével • Most: __construct() • Osztály áthelyezés az osztály hierarchiában • Osztály átnevezése • Nincs automatikus szülő konstruktor hívás

  14. class HtmlTag {    public $tag;    function __construct($tag) {$this->tag = $tag;    }}class FontTag extends HtmlTag {    public $font_nev;    public $meret;    function __construct($font_nev, $meret) {parent::__construct('font');$this->font_nev = $font_nev;$this->meret = $meret;    }}$font = new FontTag('Verdana', 8);var_dump($font); object(FontTag)#1 (3) { ["font_nev"]=> string(7) "Verdana„ ["meret"]=> int(8) ["tag"]=> string(4) "font" } Egységesített konstruktorok - Példa

  15. Destruktor • Erőforrások felszabadítás (adatbázis, fájlok) • Szemét gyűjtő • __destruct() függvény • Nincs automatikus szülő destruktor hívás

  16. class FileKezelo {    public $file;    function __construct($file_nev) {$this->file = fopen($file_nev, 'r');    }    function __destruct() {        echo "\nDestruktor\n";var_dump($this->file);fclose($this->file);        echo "\nfile bezárva";    }}$f = new FileKezelo('destruktor.php');$f = null;echo "\nVége"; Destruktor resource(4) of type (stream) file bezárva Vége Destruktor - Példa

  17. Statikus tagok • static • Osztály szint • Metódusok: Osztaly::metodus() • Változók: Osztaly::$valtozo • Objektumból lehet használni a statikus tagokat, fordítva nem • $this nincs • Változók csak egyszer foglalnak memóriát nem objektumonként

  18. class Vallalat {    private static $utolso_vallalat_id = 1;    public $id;    function __construct() {$this->id = Vallalat::$utolso_vallalat_id++;    }}$v1 = new Vallalat();$v2 = new Vallalat();echo "\nV1: " . $v1->id;echo "\nV2: " . $v2->id; V1: 1 V2: 2 Statikus tagok - Példa

  19. Konstansok • Osztály szint • Nem változtatható • const KONSTANS_NEVE • Nincs $ jel • Osztaly::KONSTANS_NEVE

  20. class FileKezelo {    const MOD_CSAK_OLVASHATO = 'r';    const MOD_IRHATO_OLVASHATO = 'r+';    public $file;    function __construct($file_nev, $mod) {        echo "\nMód: " . $mod;$this->file = fopen($file_nev, $mod);    }    function __destruct() {        echo "\nDestruktor\n";var_dump($this->file);fclose($this->file);        echo "\nfile bezárva";    }}$f = new FileKezelo('konstans.php', FileKezelo::MOD_CSAK_OLVASHATO);$f = null;echo "\nVége"; Mód: r Destruktor resource(4) of type (stream) file bezárva Vége Konstansok - Példa

  21. Közvetlen elérés • Függvény, ami objektumot ad vissza • fuggv()->valtozo • Ha nincs rá hivatkozva máshol, akkor a szemétbe kerül

  22. class Pont {    public $x, $y;    function __construct($x, $y) {$this->x = $x;$this->y = $y;    }}class Teglalap {    private $bal_felso, $jobb_also;    function __construct($x1, $y1, $x2, $y2) {$this->bal_felso = new Pont($x1, $y1);$this->jobb_also = new Pont($x2, $y2);    }    function jobbAlso() {        return clone $this->jobb_also;    }}$t = new Teglalap(10, 20, 30, 40);echo "Jobb alsó: ";var_dump($t->jobbAlso());echo "\nJobb X: " . $t->jobbAlso()->x; Jobb alsó: object(Pont)#3 (2) { ["x"]=> int(30) ["y"]=> int(40) } Jobb X: 30 Közvetlen elérés - Példa

  23. Interfészek • Többszörös öröklés nincs • Helyette interfész • Olyan mint egy absztrakt metódusokból álló osztály • implements

  24. interface Papir {    function eg();}class Penz {    function fizet() {        echo "\nFizetek";    }}class PapirPenz extends Penz implements Papir {    function eg() {        echo "\nÉgek";;    }}$pp = new PapirPenz();$pp->fizet();$pp->eg(); Fizetek Égek Interfészek - Példa

  25. instanceof operátor • $objektum instanceof Osztaly • ha a $objektum az Osztaly példánya • ha $objektum Osztaly leszármazottjának példánya • $objektum instanceof Interfesz • ha a $objektum olyan osztaly példánya, amely implementálja az Interfesz-t • ha a $objektum olyan osztaly leszármazottjának példánya, amely implementálja az Interfesz-t

  26. interface Papir {    function eg();}class Penz {}class FemPenz extends Penz {}class PapirPenz extends Penz implements Papir {    function eg() {        echo "\nÉgek";;    }}class NagyCimlet extends PapirPenz {}$p = new Penz();$fp = new FemPenz();$pp = new PapirPenz();$nc = new NagyCimlet(); $p instanceof Penz igaz $fp instanceof Penz igaz $pp instanceof Papir igaz $nc instanceof Papir igaz $p instanceof PapirPenz hamis $fp instanceof PapirPenz hamis $fp instanceof Papir hamis instanceof operátor – Példa 1

  27. Szigorú osztály paraméterek • function X(Osztaly $param) • function X(Interfesz $param) • instanceof vizsgálat a függvény végrehajtása előtt

  28. interface Papir {    function eg();}class Penz {}class FemPenz extends Penz {}class PapirPenz extends Penz implements Papir {    function eg() {        echo "\nÉgek";;    }}class NagyCimlet extends PapirPenz {}function eleget(Papir $papir) {    echo "\nEléget";}$p = new Penz();$fp = new FemPenz();$pp = new PapirPenz();$nc = new NagyCimlet();eleget($pp);eleget($nc);eleget($fp); Eléget Eléget Fatal error: Argument 1 must implement interface Papir in … Szigorú osztály paraméterek

  29. Kivételkezelés • Hiba esetén leállás helyett kivételt „dob” • A kivétel megfogható • try { … } catch (KivetelOsztaly $kivetel) {} • Elindul a kódban visszafelé • A dobott kivétel osztályának megfelelő catch blokk végrehalytása • A blokk utáni következő utasítással folytatódik • Meg nem fogott kivételek

More Related