Na navigaci | Klávesové zkratky

Translate to English… Ins Deutsche übersetzen…

Sbohem a šáteček, Nette 2.0 & PHP 5.2

Jsou tomu 3 roky, kdy vyšlo Nette 2.0.0. Šlo o přelomovou verzi. Uzavřela pár let trvající vývoj a přinesla novinky, bez kterých si dnes vůbec nelze vývoj v Nette představit.

  • Dependency Injection
  • formát NEON
  • Debug Bar rozšiřitelný o vlastní panely
  • unobtrusive JavaScript validation ve formulářích
  • nové API pro rozšiřování Latte
  • novou strukturu jmenných prostorů a tříd
  • představila databázovou vrstvu Nette Database a NDBT
  • a také úplně nově sepsanou dokumentaci

Shodou okolností v té době byly vydány i přelomové dvojkové verze významných frameworků Zend a Symfony. Nedá mi to nepřipomenout, že na rozdíl od nich Nette nehodilo uživatele svých předchozích verzí přes palubu, tj. neudělalo mezi verzemi tlustou čáru, ale naopak se snažilo o zachování kompatibility, jak to jen bylo možné. Uživatelé také například dostali nástroj, který jim ve zdrojových kódech nahradil původní názvy tříd za nové atd.

PHP 5.2

Řada 2.0 stále držela podporu PHP 5.2, včetně verze PHP 5.2.0, což bylo skutečně bolestivé. Šlo totiž o jednu z méně povedených verzí PHP, jenže Debian ji měl předinstalovanou a konzervativní správci ji odmítali aktualizovat.

Zajímavostí je, že Nette bylo již od roku 2010 psáno čistě v PHP 5.3 se všemi jeho vymoženostmi, jako jsou jmenné prostory nebo anonymní funkce. (Dvě) verze pro PHP 5.2 byly vytvářeny strojově převodníkem. Ten nejen zaměňoval názvy tříd na varianty bez jmenných prostorů, ale poradil si i s přepisem anonymních funkcí a řadou dalších odlišností, jako například nemožností použít func_get_args() jako parametr funkce atd.

Příklad kódu v PHP 5.3:

/**
 * Caches results of function/method calls.
 * @param  mixed
 * @param  array  dependencies
 * @return Closure
 */
public function wrap($function, array $dependencies = NULL)
{
    $cache = $this;
    return function() use ($cache, $function, $dependencies) {
        $key = array($function, func_get_args());
        $data = $cache->load($key);
        if ($data === NULL) {
            $data = $cache->save($key, Nette\Callback::create($function)->invokeArgs($key[1]), $dependencies);
        }
        return $data;
    };
}

A převedeného kódu pro PHP 5.2:

/**
 * Caches results of function/method calls.
 * @param  mixed
 * @param  array  dependencies
 * @return NClosure
 */
public function wrap($function, array $dependencies = NULL)
{
    $cache = $this;
    return create_function('',
        'extract($GLOBALS[0]['.array_push($GLOBALS[0], array('cache'=>$cache,'function'=> $function,'dependencies'=> $dependencies)).'-1], EXTR_REFS);
        $_args=func_get_args(); $key = array($function, $_args);
        $data = $cache->load($key);
        if ($data === NULL) {
            $data = $cache->save($key, NCallback::create($function)->invokeArgs($key[1]), $dependencies);
        }
        return $data;
    ');
}

Dependency Injection

Co zpětně vidím jako nejdůležitější přínos Nette 2.0? Dependency Injection. Ale slovy klasika:

To není jednoduchá věc to Dependency Injection. Není. To je věc, ve které se ne každý dost dobře vyzná.

DI nahradilo do té doby používaný objektový Service Locator a jeho statickou variantu, třídu Environment. Čímž naprosto převrátilo způsoby, jak aplikace navrhovat. Přineslo kvalitativní posun na novou úroveň. Proto také přepsat aplikaci používající Environment na Dependency Injection je nesmírně náročné, protože to vlastně znamená ji navrhnout znovu a lépe.

End of Life

První den roku 2014 vyšlo Nette 2.0.14. Ano, tak hezky to vyšlo :-) Tím byl ukončen vývoj řady 2.0 a série vstoupila do roční fáze critical issues only, kdy byly opravovány jen závažné chyby. Dnes tato fáze končí. Před pár dny vyšlo Nette 2.0.18, definitivně poslední verze této řady a také poslední verze pro PHP 5.2.

Tak sbohem a šáteček!

(Do fáze critical issues only nyní vstupuje řada 2.1. Po dobu roku 2015 budou opravovány jen závažné chyby.)

Komentáře

  1. Milo #1

    avatar

    Tři roky… ani se mi nechce věřit. Ten pokrokový commit si pamatuji :)

    Na nové fičurky si zvykám tak rychle, že by mě bolelo vrátit se třeba jen o 3 setinky.

    Díky!

    před rokem | odpovědět
  2. Stejsi #2

    Díky za další hezký článek, mezi svátkma se mi nechce už ani do lednice pro pivo, takže si o to víc vážím toho, že si pro nás něco napsal ;-)

    před rokem | odpovědět
  3. David Grudl http://davidgrudl.com #3

    avatar

    Příští verze Nette 2.3 bude nadále podporovat PHP 5.3, tedy tato verze bude podporována ještě dlouhou dobu. Nicméně z bezpečnostního hlediska doporučuji všem přejít na novější verzi PHP, jelikož 5.3 již není udržovaná.

    před rokem | odpovědět

Zanechat komentář

Text komentáře
Kontakt

(kvůli gravataru)



*kurzíva* **tučné** "odkaz":http://example.com /--php phpkod(); \--