Zend Framework
Školení, která pořádám
Na světlo světa se pomalu ale jistě klube Zend Framework, který by měl zjednodušit a sjednotit zpracování úloh, které se v PHP často řeší. Připomínám, že Zend je firma, která stojí za jádrem PHP od verze 4, proto o tomto frameworku asi ještě hodně uslyšíme.
Jeden z prvních tutoriálů napsal jeden z autorů Frameworku Chris Shiflett a soustředí se v něm pouze na Zend_Controller, Zend_View a Zend_InputFilter. Zend_Db záměrně pro jeho nedokončenost vynechává. Zend Framework je ale mnohem rozsáhlejší. Pojďme se tedy podívat na jednotlivé komponenty:
- Zend
- Slouží především pro nahrávání ostatních tříd a práci s registrem, tedy o něco chytřejší obdobou globálních proměnných.
- Zend_Controller
- Na tento objekt se soustředí zmiňovaný tutoriál, takže jen stručně: Všechny cesty se např. pomocí mod_rewrite nechají zpracovávat jedním skriptem. Ten při dotazu
/article/new
nahraje soubor articleController.php
a ve stejnojmenném objektu zavolá metodu newAction
. Při neexistujícím controlleru se zavolá metoda IndexController::noRouteAction
, při dotazu na samotný adresář se volá indexAction
, dynamická URL se dají vyřešit přetěžováním.
- Zend_Db
- Skupina objektů využívá PDO a přidává možnost generování SQL dotazů, takže místo
SELECT * FROM tabulka
se může psát $db->select()->from('tabulka', '*')
, obdobně i u ostatních SQL příkazů. Zápis INSERT a UPDATE to může při použití týchž dat příjemně zjednodušit, u příkazu SELECT bych zůstal u SQL. Zděděním Zend_Db_Table lze volání dále zjednodušit na $tabulka->insert($data)
.
- Zend_Feed
- Objekt slouží jak ke zpracování, tak k vytváření formátů RSS a Atom.
- Zend_HttpClient
- Objekt plní zhruba stejnou funkci jako kontexty v samotném PHP.
- Zend_InputFilter
- Slouží k ověřování a filtrování dat od uživatele a je tedy obdobou funkce filter_input rozšíření Filter. Využívá objekt Zend_Filter, který je obdobou funkce filter_input.
- Zend_Json
- Převádí JSON do struktur PHP a naopak, dá se tedy použít především pro jednodušší interoperabilitu PHP a JavaScriptu.
- Zend_Log
- Slouží k ukládání chyb a podobných informací do logu, zavoláním jedné statické metody lze chybu vypsat na výstup, uložit do souboru nebo do databáze.
- Zend_Mail
- Objekt slouží pro posílání textových e-mailů, HTML e-mailů, s oběmi částmi, dovoluje připojovat i jiné soubory. Pro posílání umožňuje používat funkci mail nebo SMTP včetně možnosti poslat více zpráv na jedno připojení. Používá objekt Zend_Mime, který poskytuje základní metody pro kódování a práci s oddělovači jednotlivých částí MIME zpráv.
- Zend_Pdf
- Slouží pro vytváření PDF dokumentů, dovoluje také nahrát stávající dokument a pomocí revizí v něm dělat změny a přidávat, odstraňovat a měnit pořadí jeho stránek.
- Zend_Search
- Objekt pro fulltextové vyhledávání je odvozen z projektu Lucene a na rozdíl od ostatních objektů je ještě spolu s nedokumentovaným objektem Zend_Form zatím umístěn v tzv. inkubátoru. Vypadá to, že je poměrně mocný, ale působí na mě dojmem, že byl do Zend Frameworku přilepen.
- Zend_Service
- Objekt slouží pro používání webových služeb. Kromě univerzálního REST jsou k dispozici objekty pro Amazon, Flickr a Yahoo. Jistě nebude trvat dlouho a k dispozici bude i objekt pro Google API.
- Zend_View
- Slouží pro oddělení prezentační logiky. Z funkcí šablonovacího systému implementuje pouze přiřazení proměnných a escapování, výstup je možné realizovat běžnými PHP konstrukcemi nebo použít samostatný šablonovací systém.
- Zend_XmlRpc
- Klient XML-RPC.
Závěr
Zend Framework nepřináší žádné revoluční myšlenky, ostatně to není ani jeho hlavní cíl jako např. u frameworku PRADO. Hlavním cílem je vytvořit knihovnu, u které se její uživatel bude moci spolehnout na kvalitu, jednotnost přístupu a vzájemnou provázanost všech jejích komponent. Tímto směrem má podle mě nakročeno dobře. Pro PHP existuje řada rozšíření, u kterých může být problém s instalací, knihoven, u kterých se člověk nemůže vždy spolehnout na kvalitu, a nezávislých nástrojů, které si věci často dělají po svém. Zend si toho všiml, a proto se rozhodl vytvořit tento framework, ve který by uživatelé měli mít důvěru už jenom proto, že pochází přímo od „The PHP Company“. Myslím, že by to PHP mohlo posunout zase o kousek dál. Zlé jazyky taky tvrdí, že Zend po C a Javě konečně začal programovat i v PHP, takže bude mít vůli řešit i místy nepředvídatelné chování PHP především při složitější práci s objekty.
Já osobně ho nejspíš používat nebudu, protože mám rád nad věcmi plnou kontrolu a rád vytvářím krátký a elegantní kód. V tom se sice Framework snaží pomáhat, moc se mi ale nechce nahrávat momentálně 336 KB základních knihoven při každém požadavku… Pokud by ale např. zadavatel na použití ZF trval, tak bych s tím neměl problém. Samotné PHP umožňuje jednoduše vytvářet kvalitní kód a ještě o něco jednodušeji špatný kód :-), Zend Framework by měl vytváření dobrého kódu ještě zjednodušit a špatný kód co nejvíc potlačit, samozřejmě za cenu pochopení a naučení se jeho možností.
Diskuse
Hds:
Ačkoliv přeji Zend Frameworku, aby se uchytil a byl široce používán, já osobně raději budu nadále používat svůj vlastní mini-framework, u kterého vím naprosto přesně co se děje a proč se to děje (ach ta paranoia :), než se učit pracovat s novým "kolosem". Ale jednou, až bude ZF více rozšířen, otestován a všeobecně přijímán za standard, proč ne...
Martin:
Řešení "místy nepředvídatelného chování PHP" ovšem ale nemá se společnosti Zend nic společného. To je záležitost vývojářů PHP. Zend != PHP
Jakub Podhorský:
jo ale Zend má na svědomí Zend Engine kterej pohání PHP a má pokud se nepletu tak i práci s objektama a tam je problémů víc než dost takže společnost Zend má tu moc s PHP nějak hýbnout k lepšímu
podle mě se ale na Zend Frameworku mělo začít pracovat už mnohem dřív třeba by dnes PHP bylo někde jinde :)
Martin:
Zend Engine nemá na svědomí Zend (společnost), ale tvůrci Zend Enginu (z jejichž jmen - Zeev Suraski a Andi Gutmans - vzniklo slovo "Zend") stojí za Zendem (společností). Vývoj Zend Enginu a celého PHP je v kompetenci PHP Group, kterého jsou členy i Zeev a Andi.
ATom:
No já nevím. Před pár lety jsem začal s tvobou vlastního frameworku a ten stále roste. Ale jeho vývoj stojí spousta času. Na druhou stranu jeho používání mi strašně moc času ušetří. Pořád psát dokola to samé je hrozná ztráta času. A rovněž nesouhlasím s tím, že bez použití nějakého frameworku vzniká elegantní a přehledný kód. S použitím frameworku je kód mnohem přehlednější, nemusím se soustředit na spoustu zbytečností, které to řeší samo. Ale souhlasím, že je problém spolehnout se na nějakou černou skříňku které nerozumíme. Ale třeba u Javy je to zcela běžné. Tak proč ne i u PHP. Jednou.
Leo:
"Ale třeba u Javy je to zcela běžné. Tak proč ne i u PHP. Jednou."
Protoze na ty, co pouzivaji PHP (a pocitam se mezi ne), plati tento Murphyho zakon:
"Kazdy si chce oloupat svuj vlastni banan".
Leo
ATom:
Důvodů bude asi více. Například mně osobně hrozně vadí absence jmenných prostorů, jaké jsou v Javě. Navíc je v PHP komunitě mnohem více začínajících programátorů. A také PHP nenutí programátory natolik Jako Java psát znovupoužitelný kód.
Rados:
Mě se to zamlouvá. Až bude trochu vyslělejší tak se to asi naučim. Na aplikace, který budou muset být maximálně rychlé ho ale používat asi nebudu. Nevíte něco o rychlosti Zend Frameworku?
Lukas Mach:
>> Na aplikace, který budou muset být
>> maximálně rychlé ho ale používat
Aplikace, co museji byt maximalne rychle, nepouzivaji PHP. Mimoto se podivejte na zdrojak Mediawiki - ten je taky sam desne pomaly, pouzitelny pro tak ohromne mnozstvi dotazu jako ma Wikipedia je ale az potom, co se pouzije Memcache nebo neco podobneho.
Diskuse je zrušena z důvodu spamu.