ݺߣ

ݺߣShare a Scribd company logo
Objektum-Orientáltfejlesztés PHP nyelvenSimon Գٴdz첹é2011-01-18
Miről is leszitt ma szó?Magic Method-okInterface-kKivételkezelésStandard PHP LibraryTervezésimintákMűveletek objektumokkalReflection APIEgységtesztelés
Magic Method-okSpeciális helyzetekben, automatikusan hívódó metódusokHasonlóak az EJB életciklus metódusokhoz, de itt nincs annotációA __ névtér van fenntartva számukra
MM ÉletciklusmetódusokObjektumok élete során hívódnak meg automatikusan__constructOsztály példányosításakor hívódik meg. __destructA GC hívja megNem lehetünk biztosak benne
MM Entitás-kezeléssetter/getter metódusokat lehet velük gyártani__setSetter metódus__getGetter metódus__issetIsset vizsgálat metódusa__unsetAttribútum törlése
MM Entitás-kezelés példa
MM SerializálásEzek különböző hook-ok, melyeket a serializálás hív meg, amennyiben léteznek__sleepHasonlóan a Java „transitive” módosítójához: megszűri az attribútumokat, és lezárja a kapcsolatokat__wakeupDb kapcsolatok, stb. visszaállítása, amik elvesznek a mentés során__set_stateOsztály var_export-jakor hívódik meg, a kimenetét alakítja át
MM MetódushívásokNem létező metódusok hívásakor lefutó magicmethod-ok__callNem létező tagmetódus esetén__callStaticNem létező statikus metódus esetén__invokeFüggvényként hívódó osztály esetén
MM Ésatöbbi__autoloadNem betöltött osztály esetén hívódik__cloneKlónozásnál hívódik meg, segít az újonnan létrejött osztály paraméterezésében__toStringHa egy objektumot string-ként próbálunk kezelni, itt állíthatunk össze string (!) kimenetet
Interface-kImplementáció nélküli (publikus) metódusok és konstansok deklarációjaÁtjárhatóságot valósít meg
Interface-re programozásInterfacereferenciahasználataTypehint használata
Interface példa
KivételkezelésOOP hibakezelési módTisztán tartja a  kódotSzeparálja a nem várt eseményeketVezérlésátadással a hibakezelés a megfelelő helyen végezhető el
Származtatott kivételekAz Exception osztály leszármaztathatóA catch blokk „IS A” vizsgálatot végez, és csak az első igaz feltételbe megy bele
Továbbdelegált kivételekA 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
Standard PHP LibraryInterface-k és osztályok gyűjteményeStandard megoldásokNincs szükség külső extension-raJava SDK-hoz hasonlóan
SPL IterátorokÖsszetett objektum bejárására szolgáló algoritmusokTervezési minta23 iterátor implementációt tartalmazPéldák: ArrayIterator, DirectoryIterator, EmptyIterator, RecursiveArrayIterator, SimpleXMLIterator, CachingIterator
SPL AdatstruktúrákAz SPL biztosítja néhány elterjedt adatstruktúra implementációjátPéldául: SplStack, SplQueue (duplán láncolt listával), SplHeap (Min és Max változattal is), SplObjectStorage, SplDoublyLinkedList
SPL KivételekAz SPL biztosít néhány „szabványos” kivételt az általános esetekrePéldául: BadMethodCallException, InvalidArgumentException, OutOfRangeException, RuntimeException, LogicException, OverflowException
SPL ArrayObjectWrapper osztályObjektumokat lehet tömbként kezelni a segítségével
SPL AutoloadDinamikus osztálybetöltő mechanizmusAz SPL biztosít hozzá felületet, amelyen keresztül befolyásolhatóFunkciók:spl_autoload_callspl_autoload_extensionsspl_autoload_functionsspl_autoload_registerspl_autoload_unregisterspl_autoload
TervezésimintákÁltalános problémákra adnak általános megoldásokatNyelvtől függetlenJól bejáratott szakmai eszköztár
MVC (Model-View-Controller)Architektúrális mintaFelosztja a kódotKülönböző felelősséget ruház a részekre
SingletonLétrehozó mintaBiztosítja, hogy egy entitásból csakis és kizárólag egy létezzen(Depricated)
Singleton példa
FactorymethodLétrehozó mintaA nélkül hozza létre az entitást, hogy a valós osztályát ismernünk kéne (interface)
Factory példa
AdapterStrukturális mintaEgy adott osztályt hozzáilleszt egy adott felülethez
Adapter példa
Műveletek objektumokkal: ÖsszehasonlításEgymássalÁllapotok összehasonlításaReferenciák összehasonlításaOsztályokkal (és interface-kkel)is_a, instanceof, get_class, get_parent_class, is_subclass_of
Műveletek objektumokkal: MásolásÚj referencialétrehozásaKlónozásShallowcopy (default): az attribútum objektum-mutatója másolódik le: ugyan arra az objektumra mutat, mint az eredetiDeep copy: az attribútum objektum állapota másolódik le
Műveletek objektumokkal: IterációMindig a láthatóság szabályainak megfelelően
Reflection APIOsztályok és függvények gyűjteményeNincs szükség külső extension-raAz OOP szabályainál nagyobb hozzáférést nyújtanak a rendszer részeihezReverse-engineering-hez kiváló
Reflection API részeiReflectionClass: az osztályokrólReflectionFunction:  a funkciókrólReflectionMethod: az osztálymetódusokrólReflectionObject: az objektumokrólReflectionParameter: hívási paraméterrőlReflectionProperty: az attribútumokról…
Reflection API függvényekgetDocCommentgetConstantsisProcectedisOptionalhasMethodgetNamegetDefaultValuegetStartLineisUserDefiniedisAbstractgetParentClassexportgetFileNamegetMethodsetAccessible
EgységtesztelésA komplex munka minden esetben hibával járA hibák számát és hatását minimalizálni kellVállalati standard: 15-50 defektus / KLOCEnnek költséghatékonynak kell lennie
EgységtesztelésHa 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ükEszköz: egységtesztelés
PHP UnitSebastian Bergmann (thePHP.cc)Xunit családDe facto PHP szabványKönnyen telepíthető és kezelhetőAssert-ekkel dolgozikPl.: assertArrayHasKey, assertEquals, assertFalse, assertFileExists, assertGraterThan, assertNull, assertRegExp, assertStringStartsWith
PHP Unit példa
Ez persze nem elégTipikus hibákNem megfelelő erőforrás-ráfordításLefedettségImmunissá válásTöbbszörös hibaKontextus függőség
ööö!éé?

More Related Content

Objektum-orientált fejlesztés PHP nyelven (2. rész)