1 / 27

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

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. 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.

flynn
Télécharger la présentation

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

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ágaiAz OOP terén

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

  3. 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

  4. 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

  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: 1 Érték: 2 Objektum referenciák – Példa/1 Fügv: 1 Érték: 2

  6. 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 nincs – PHP5 átmásol mindent • Ha nincs __clone()

  7. class Gepkocsi {    public $rendszam = 1;    public $szin;    function __clone() {        echo "\nklónozok...\n";$this->rendszam = $this->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... Szín: piros Rendszam: 1 Szín: piros Rendszam: 2 Klónozás - Példa

  8. 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

  9. 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

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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

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

  19. 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

  20. 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

  21. 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

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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

More Related