a php 5 újdonságai
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/1.jpg)
A PHP 5 újdonságai
Az OOP terén
![Page 2: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/2.jpg)
Miről lesz szó?
Osztályok kezelése– Új direktívák– Konstruktor– Destruktor
Interfészek Kivételkezelés
![Page 3: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/3.jpg)
Szóhasználat
Metódus Változó Tag változó Tag függvény Függvény Osztály Objektum Példány
![Page 4: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/4.jpg)
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
![Page 5: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/5.jpg)
Objektum referenciák - Példa
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
Fügv: 1
Érték: 2
![Page 6: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/6.jpg)
Objektum referenciák – Példa/1
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
Fügv: 1
Érték: 2
![Page 7: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/7.jpg)
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()
![Page 8: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/8.jpg)
Klónozás - Példa
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
![Page 9: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/9.jpg)
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
![Page 10: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/10.jpg)
Információk elrejtése - Példa
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 …
![Page 11: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/11.jpg)
Absztrakció
Absztrakt metódusok abstract abstract class
![Page 12: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/12.jpg)
Absztrakció - Példa
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 …
![Page 13: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/13.jpg)
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
![Page 14: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/14.jpg)
Egységesített konstruktorok - Példa
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"
}
![Page 15: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/15.jpg)
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
![Page 16: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/16.jpg)
Destruktor - Példa
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
![Page 17: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/17.jpg)
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
![Page 18: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/18.jpg)
Statikus tagok - Példa
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
![Page 19: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/19.jpg)
Konstansok
Osztály szint Nem változtatható const KONSTANS_NEVE Nincs $ jel Osztaly::KONSTANS_NEVE
![Page 20: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/20.jpg)
Konstansok - Példa
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
![Page 21: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/21.jpg)
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
![Page 22: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/22.jpg)
Közvetlen elérés - Példa
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
![Page 23: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/23.jpg)
Interfészek
Többszörös öröklés nincs Helyette interfész Olyan mint egy absztrakt metódusokból álló
osztály implements
![Page 24: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/24.jpg)
Interfészek - Példa
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
![Page 25: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/25.jpg)
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
![Page 26: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/26.jpg)
instanceof operátor – Példa 1
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
![Page 27: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/27.jpg)
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
![Page 28: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/28.jpg)
Szigorú osztály paraméterek
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 …
![Page 29: A PHP 5 újdonságai](https://reader035.vdocuments.net/reader035/viewer/2022062517/56813ab8550346895da2bdfa/html5/thumbnails/29.jpg)
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