2. Miről is leszitt ma szó? Magic Method-ok Interface-k Kivételkezelés Standard PHP Library Tervezésiminták Műveletek objektumokkal Reflection API Egységtesztelés
3. Magic Method-ok Speciális helyzetekben, automatikusan hívódó metódusok Hasonlóak az EJB életciklus metódusokhoz, de itt nincs annotáció A __ névtér van fenntartva számukra
4. MM Életciklusmetódusok Objektumok élete során hívódnak meg automatikusan __construct Osztály példányosításakor hívódik meg. __destruct A GC hívja meg Nem lehetünk biztosak benne
5. MM Entitás-kezelés setter/getter metódusokat lehet velük gyártani __set Setter metódus __get Getter metódus __isset Isset vizsgálat metódusa __unset Attribútum törlése
7. MM Serializálás Ezek különböző hook-ok, melyeket a serializálás hív meg, amennyiben léteznek __sleep Hasonlóan a Java „transitive” módosítójához: megszűri az attribútumokat, és lezárja a kapcsolatokat __wakeup Db kapcsolatok, stb. visszaállítása, amik elvesznek a mentés során __set_state Osztály var_export-jakor hívódik meg, a kimenetét alakítja át
8. MM Metódushívások Nem létező metódusok hívásakor lefutó magicmethod-ok __call Nem létező tagmetódus esetén __callStatic Nem létező statikus metódus esetén __invoke Függvényként hívódó osztály esetén
9. MM Ésatöbbi __autoload Nem betöltött osztály esetén hívódik __clone Klónozásnál hívódik meg, segít az újonnan létrejött osztály paraméterezésében __toString Ha egy objektumot string-ként próbálunk kezelni, itt állíthatunk össze string (!) kimenetet
13. Kivételkezelés OOP hibakezelési mód Tisztán tartja a kódot Szeparálja a nem várt eseményeket Vezérlésátadással a hibakezelés a megfelelő helyen végezhető el
14. Származtatott kivételek Az Exception osztály leszármaztatható A catch blokk „IS A” vizsgálatot végez, és csak az első igaz feltételbe megy bele
15. Továbbdelegált kivételek A kivételt nem kötelező az adott blokkban lekezelni (vagy egyáltalán lekezelni) Ha nincs elkapva, a hívási fán felfele delegálódik
16. Standard PHP Library Interface-k és osztályok gyűjteménye Standard megoldások Nincs szükség külső extension-ra Java SDK-hoz hasonlóan
17. SPL Iterátorok Összetett objektum bejárására szolgáló algoritmusok Tervezési minta 23 iterátor implementációt tartalmaz Példák: ArrayIterator, DirectoryIterator, EmptyIterator, RecursiveArrayIterator, SimpleXMLIterator, CachingIterator
18. SPL Adatstruktúrák Az SPL biztosítja néhány elterjedt adatstruktúra implementációját Például: SplStack, SplQueue (duplán láncolt listával), SplHeap (Min és Max változattal is), SplObjectStorage, SplDoublyLinkedList
19. SPL Kivételek Az SPL biztosít néhány „szabványos” kivételt az általános esetekre Például: BadMethodCallException, InvalidArgumentException, OutOfRangeException, RuntimeException, LogicException, OverflowException
30. Műveletek objektumokkal: Összehasonlítás Egymással Állapotok összehasonlítása Referenciák összehasonlítása Osztályokkal (és interface-kkel) is_a, instanceof, get_class, get_parent_class, is_subclass_of
31. Műveletek objektumokkal: Másolás Új referencialétrehozása Klónozás Shallowcopy (default): az attribútum objektum-mutatója másolódik le: ugyan arra az objektumra mutat, mint az eredeti Deep copy: az attribútum objektum állapota másolódik le
33. Reflection API Osztályok és függvények gyűjteménye Nincs szükség külső extension-ra Az OOP szabályainál nagyobb hozzáférést nyújtanak a rendszer részeihez Reverse-engineering-hez kiváló
34. Reflection API részei ReflectionClass: az osztályokról ReflectionFunction: a funkciókról ReflectionMethod: az osztálymetódusokról ReflectionObject: az objektumokról ReflectionParameter: hívási paraméterről ReflectionProperty: az attribútumokról …
36. Egységtesztelés A komplex munka minden esetben hibával jár A hibák számát és hatását minimalizálni kell Vállalati standard: 15-50 defektus / KLOC Ennek költséghatékonynak kell lennie
37. Egységtesztelés Ha a részek jók, akkor a részek egésze is lehet jó Az egységbezárás lehetőséget ad arra, hogy a részeket teszteljük Eszköz: egységtesztelés
38. PHP Unit Sebastian Bergmann (thePHP.cc) Xunit család De facto PHP szabvány Könnyen telepíthető és kezelhető Assert-ekkel dolgozik Pl.: assertArrayHasKey, assertEquals, assertFalse, assertFileExists, assertGraterThan, assertNull, assertRegExp, assertStringStartsWith