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í.

Jakub Vrána, Seznámení s oblastí, 12.5.2006, diskuse: 10 (nové: 0)

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.

ikona Jakub Vrána OpenID:

Viz také http://php.interval.cz/clanky/zend-framework-prehled-knihoven/.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.