Operátor yield


27-02-2012 00:00 - Zdroj: php.vrana.cz
HipHop for PHP kompiluje PHP kód do C++, čímž podstatně zvyšuje výkonnost. Kromě toho nabízí některé obraty navíc, např. XHP (to se ale dá použít i samostatně). Nejzásadnější odlišností HipHopu od běžného PHP je nenápadný operátor yield. Ten dovoluje přerušit funkci a při příštím zavolání v ní pokračovat na místě, kde jsme naposledy přestali. Obdobný operátor existuje i v dalších jazycích, např. v Pythonu. K čemu je něco takového dobré? Představte si, že máme na stránce několik komponent a každá z těchto komponent potřebuje načíst nějaká data (např. z databáze nebo z keše). Lze snadno vypozorovat, že čím méněkrát se s úložištěm komunikuje, tím je celý systém rychlejší. Vyplatilo by se tedy v prvním kroku od každé komponenty zjistit, co potřebuje nejdříve, pak to všechno najednou stáhnout a pokračovat získáváním dat, která jsou na tomto prvním kroku závislá. A přesně k tomu se dá operátor yield použít. Jak by vypadala funkce pro získání článku, jeho značek a názvů těchto značek? <?php function getArticleWithTags($id) { $article = yield wait_for(getArticle($id)); $tags = yield wait_for(getArticleTags($article)); $article->tagNames = yield wait_for(getTagNames($tags)); yield result($article); } ?> Volající kód obejde jednotlivé komponenty a shromáždí všechno, co potřebují. Pak data jednou komunikací s úložištěm získá a komponentám to zase rozdělí. wait_for() je celkem jednoduchá funkce, která si pamatuje, co všechno se má získat. yield result() je totéž jako return, který nelze ve funkcích s yield používat. Pokud je vám příklad povědomý z článku o NotORM 2, tak jste ho poznali správně. S využitím operátoru yield se dá aplikace snadno navrhnout tak, aby data načítala odloženě a využila všech výhod s tím spojených (např. jednodušší a efektivnější kešování). Anonymní funkce ... - Pokračovat...
addthis





Poslední příspěvky z blogu:
php.vrana.cz



Zašlete svůj blog
Požadavky na Blog
Ochrana osobních údajů
Kontakty

This site uses Thumbshots previews