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.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Tervezési minták és a PHP 5
AZ OOP ALAPJAI.
C++ programozási nyelv Gyakorlat hét
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Szabó Tamás Károly G6HT12 A Ruby programozási nyelv.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
Kivételkezelés.
VFP Form programozás Form szerkesztő elemei vezérlő elemek
WEB Technológiák WEB-DB és XML ME Általános Informatikai Tsz. dr. Kovács László.
Kivételkezelés a C++ nyelvben Bevezetés
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Készítette: Lipp Marcell
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Java programozási nyelv Metódusok
Bevezetés Amiről ma szó lesz… Miért D? Mert a fejlesztők úgy látták, hogy a C++-on van még mit javítani. Mert a programozók a nyelvnek általában elszigetelt.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Programozás III OOP ÖRÖKLŐDÉS.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Programozás III KIVÉTEL.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Web programozás és haladó fejlesztési technikák – C#
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

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 Most – referenciák használata Mit befolyásol? – Értékadás – Függvény paraméterek

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

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

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()

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 PHP5.0.0RC1 hiba: $that értéke NULL

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

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 * ); } function getMerfold() { return $this->getKm() / ; } } $d = new Tavolsag(); $d->setKm(10); echo "\nMérföld: ". $d->getMerfold(); echo "\nKm: ". $d->tav; Mérföld: Fatal error: Cannot access private property Tavolsag::$tav in …

Absztrakció Absztrakt metódusok abstract abstract class

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 …

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

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" }

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Fatal error: Argument 1 must implement interface Papir in …

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