Saturday, March 4. 2006Zend Framework review-internals en werking
Ik heb het Zend Framework kunnen testen. Ik had erg hoge verwachtingen van dit framework. Dus een uitgebreide test run zat er zeker aan te komen. Ook heb ik de broncode doorgenomen en daar zal ik ook wat aandacht geven.
Laten we beginnen! Download eerst het framework hier. Uitpakken en beginnen maar!
"Geen installatie of configuratie veranderen?" Nee, dat hoeft niet. Scheelt weer wat tijd. Het framework bestaat uit verschillende onderdelen, zoals DB, Feed (RSS/ATOM), HttpClient, Inputfilter, JSON (JavaScript Object Notation), Mail en nog veel meer. Vrij compleet op het eerste gezicht. Bij elk framework hoort (goede!) documentatie. Zonder dit zal een framework nooit slagen en gebruikt worden. Gelukkig hebben de programmeurs achter ZF (Zend Framework) dit gesnopen. De manual is hier te vinden. Om dit artikel een beetje te snappen, moet je wel bekend zijn met het OO model van PHP5, het framework is namelijk in PHP5 geschreven. Enkele dagen geleden heb ik nog een artikel geschreven dat hier goed van pas komt. Lees het hier! Ik zal beginnen met de simpelste class, Zend. Deze class bestaat uit allemaal wrappers en static methods. Je kunt geen overerving doen, omdat de class als 'final' is gedeclareerd. Ook een instantie ervan maken zal niet lukken. PHP: $_registry is een array dat allemaal objecten zal bevatten. Dit doe je met behulp van PHP: PHP: Opmerkelijk is Zend::isReadable(). Deze method bekijkt of een bestand leesbaar is. Maar zij doet dat met fopen($file, 'r', true). De derde parameter geeft aan dat de php setting van include_path gebruikt wordt. Dit forceert je dus om include_path te gebruiken, wat in mijn ogen goed is. Deze setting kun je manipuleren met set_include_path(). Veel PHP scripts werken samen met een backend database. Na korte bestudering zie je onmiddelijk dat er gebruik gemaakt wordt van PDO (PHP Data Objects). PDO is standaard vanaf PHP 5.1. Wat is PDO precies? "PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility." Dit is dus NIET hetzelfde als Data Objecten. Korte beschrijving van Zend_Db: "Zend_Db_Adapter is the database API abstraction layer for the Zend Framework. Based on PDO, you can use Zend_Db_Adapter to connect to and work with any of the supported SQL database systems using the same API. These include Microsoft SQL Server, MySQL, PostgreSQL, SQLite, and others." De class Zend_Db bevat eigenlijk maar een functie, namelijk factory(). Ja, het alom bekende factory pattern. Deze method geeft de correcte implementatie terug aan de hand van de 'adapter' (polymorphism). PHP: Er is veel ondersteuning voor verschillende databases. Zoals je misschien al vermoed, gebruikt Zend_Db de Adapter pattern. Deze pattern verbergt als het ware een groep van objecten achter een interface. De interface bevat alle functionaliteit die alle children moet hebben. Denk aan een methods zoals query() en insert(). Het volgende UML diagram laat de hierarchie zien (ik heb niet alle database classes overgenomen). ![]() Aan functionaliteit hoef je zeker niet te klagen. Naast de "minimale" SQL ondersteuning, is er ook ondersteuning voor transactions en prepared statements. Hoe je Zend_Db het beste kunt uitbuiten kun je beter de manual raadplegen. Laatste jaren is de populariteit van RSS (Really Simple Syndication) enorm gegroeid. Een variant op RSS, overigens minder populair maar wel beter, is ATOM. Deze feeds worden steeds meer gebruikt. Ook dit framework heeft ondersteuning voor dit XML formaat. Zend_Feed handelt alles af wat met feeds te maken heeft. Ook hier zit een goede design achter. Het volgende UML diagram laat de hierarchie zien. ![]() De interfaces ArrayAccess en Iterator zijn onderdeel van SPL (Standard PHP Library). Deze interfaces vind je niet terug in het framework, maar zijn standaard onderdeel van PHP5. Door deze interfaces te manipuleren kun je op je eigen manier bepalen hoe je arrays doorloopt en verwerkt. Het echte werk zit in de class Zend_Feed_Element. Er wordt veel gewerkt met DOM (Document Object Model). De static method Zend_Feed::import() zorgt ervoor dat de correcte implementatie aan het werk wordt gezet, dus Zend_Feed_Rss of Zend_Feed_Atom. PHP: Genoeg onder de kap gekeken. Laten we wat gaan testen! Ik ga eerst beginnen met alle demo's testen. Voordat je de demo's gaat testen, moet je eerst de include_path veranderen. Dit kun je in je php.ini doen of per demo script even set_include_path('/jouw/path'); doen. Als eerste ga ik de Feed demo testen. We krijgen raar genoeg een error: CODE: Fatal error: Undefined class constant 'HOST_ALLOW_DNS' in /www/zendframework/library/Zend/Uri/Http.php on line 373 We gaan naar Http.php, regel 373. PHP: Ahaa, de constante moet dus in de class Zend_InputFiler staan. Echter staat deze er niet! Helaas, deze demo werkt niet. De andere demo's kreeg ik wel aan de praat, maar vereiste wel enige knutselwerk. "Simplicity" was toch een kernwoord van dit framework? Bij de demo's is dit niet het geval. Maar goed, laten we niet te snel conclusies trekken. Niet alle modules zijn af, zoals te lezen valt in de TODO. Daarom moet je goed opletten op wat wel af is en wat niet. Slotwoord Vooraf had ik zeer hoge verwachtingen van het Zend Framework. Het wordt ontwikkeld door erkende PHP programmeurs en techneuten met een brein. Het design achter het framework vind ik zeer goed. Het is goed doordacht en uitbreiden op dit framework moet geen probleem worden. De hierarchies zijn duidelijk en het OO model van PHP5 wordt goed uitgebuit. De documentatie is goed, wat je weinig ziet bij andere frameworks (Ja, er zijn uitzonderingen!) en het framework is nog niet eens af. Het is nog wel even stribbelen met de code, maar vergeet niet dat dit nog een BETA release is. Ik kan niet wachten op versie 1.0! Er is echter nog wel een klein minpuntje. De View vind ik niet goed geimplementeerd. Dit is ruwweg include($file) en in $file staat gewoon PHP code. Ik ben een die-hard Smarty fanaat, dus mocht dat niet in de toekomst veranderen dan zal ik daar me eigen code erop loslaten. Ik zal komende dagen nog zeker met ZF spelen. Het heeft me verwachtingen voldaan en ik ben al helemaal weg van de stukken code. Deze post zal zeker niet de laatste zijn over dit fantastische framework. Ik weet nu al dat ik dit framework voor mijn toekomstige web applicaties ga gebruiken. Het heeft alle functionaliteit die ik nodig heb en ik kan er gemakkelijk een nieuwe module voor breien. Dit laatste vind ik extreem belangrijk. Ik moet er mijn eigen kind van kunnen maken, opvoeden op mijn manier en nieuwe dingen leren op mijn manier. Zend for President. Comments
Display comments as
(Linear | Threaded)
Na zoveel enthousiasme moet ik het toch ook maar uit gaan proberen! Je bent er trouwens lekker snel bij. Dank je voor je heldere post. Grtz.
De view kan je ook implementeren met een template class naar keuze, staat in de manual.
Add Comment
|
Er wordt al weken gewerkt aan een nieuwe PHP Framework. Dit nieuwe framework wordt de status quo. Het Zend Framework wordt ontwikkeld door Zend en andere bekende PHP ontwikkelaars. Wat heeft het allemaal in huis?"Extreme Simplicity" is de kernzin, ze gaa
Tracked: Mar 04, 18:55
Hello! Good work! Free samsung ringtones
Tracked: May 02, 18:58