Jste webový vývojář nebo vlastníte nějaký web? Nebo váš web běží na nějakém CMS vnímajícím PHP, jako jsou WordPress, Drupal, Joomla nebo Magento? Pak mám pro vás dobrou zprávu: nedávno byla vydána nová, co do funkcí kompletní beta verze PHP 7. Hlavní vydání 7.0.0 obsahuje tolik skvělých funkcí, že jsme se rozhodli věnovat jí celý příspěvek. Nejprve je však třeba vsunout několik připomínek.

Připomínáme tedy, že PHP 7 je pořád ještě ve vývojové fázi, takže ho nepoužívejte v ostrém provozu, dokud v listopadu nebude vydána finální verze. Pokud se – jakožto budoucí uživatel – chcete férově podílet na vývojovém procesu, můžete s ním pomoci tím, že si stáhnete nejnovější betu, pohrajete si s ní ve svém testovací prostředí a nahlásíte chyby, které jste během testování našli. Kdy bude k dispozici příští beta, zjistíte v harmonogramu projektu.

Testovací verzi PHP7 si můžete také bezplatně vyzkoušet i například na hostingu od CZECHIA.COM.

Článek byl původně vydán na magazínu hongkiat.com. V originále si ho můžete přečíst zde.

Máme to za sebou, pojďme tedy prozkoumat PHP 7.

1. Název je PHP 7 (ne 6)

Aktuální stabilní vydání používá číslo verze PHP 5.6. Po jistých disputacích vývojový tým rozhodl, že v příštím hlavním vydání název PHP 6 vynechá. PHP 6 už v minulosti existoval jako experimentální projekt, který ale nikdy nedospěl do produkční fáze.

Aby se předešlo tomu, že by uživatelé míchali dohromady předešlý pokus s nejnovějším vývojem, poběží nové hlavní vydání pod názvem PHP 7.

php7-logo

2. Zbrusu nový svižný engine Zend

Engine Zend pohání PHP už od roku 1999, kdy byl zaveden s novým vydáním PHP 4. Zend – nezaměňujte se Zend Framework – je open-source exekuční engine napsaný v C, který interpretuje jazyk PHP. Současná série PHP 5.X používá Zend Engine II, který rozšířil funkcionalitu původního enginu a dodal rozšiřitelný objektový model a významně posílil výkon jazyka.

PHP 7 dostává zbrusu novou verzi enginu přicházející pod kódovým názvem PHP#NG (Next Generation).

enigine-zend

Obrázek: přednáška na konferenci ZendCon 2014

3. Dvojnásobná rychlost

Nejsnáze rozpoznatelnou předností nového PHPNG enginu je signifikantní vylepšení výkonu. Vývojový tým PHPNG přefaktoroval Zend Engine, pozoruhodně optimalizoval využívání paměti a přidal kompilaci právě včas (just-in-time, JIT), která umožňuje kompilovat až při běhu, ne před zahájením vykonávání.

Výsledky? Níže vidíte, jak dopadly testy výkonnosti, které poskytl výkonový tým Zend. Když se použije PHP 7, nejenže se kód vykonává rychleji, zároveň budete potřebovat méně serverů k obsluze stejného množství uživatelů.

cms-wordpress

frameworks-laravel-zend

Obrázek: Zend.com

4. Snadnější zpracování chyb

Zpracování fatálních a zachytitelných fatálních chyb nikdy nebyla pro kodéry PHP, mírně řečeno, snadná záležitost. Nové výjimky enginu umožní nahradit tento druh chyb výjimkami. Pokud se výjimka nezachytí, PHP bude nadále vracet stejné fatální chyby, jak to činí v současné sérii 5.X.

Nové objekty \EngineException nejsou odvozené ze základní třídy \Exception. Zajišťuje se tím zpětná kompatibility a vede to při zpracování chyb na dva různé druhy výjimek: tradiční výjimky a enginové výjimky.

Aby PHP programátorům umožnil zachycovat obojí, zavádí pod názvem \BaseException novou sdílenou rodičovskou třídu.

base-exception

Obrázek: Wiki.PHP.net

5. Podpora 64 bitových systémů Windows

PHP je prominentním členem LAMP, což znamená, že jeho nativním prostředím je Linux – je ovšem také možné provozovat ho na nějakém systému Windows. Řada 5.X však ještě neposkytuje ani podporu 64 bitových celých čísel, ani podporu velkých souborů, takže až doposud se všechna sestavení x64 považovala za experimentální.

PHP 7 to mění, protože zavádí konsistentní 64 bitovou podporu, čímž se míní jak nativní podpora 64 bitových celých čísel, tak i velkých souborů, což dovoluje v budoucnu spolehlivě provozovat tento jazyk na vašem 64 bitovém systému Windows.

64-bit-support

6. Nové operátory „kosmická loď“ a koalescence

Operátor „kosmická loď“ má oficiální název kombinovaný porovnávací operátor. Notace nového operátoru vypadá takto: <=> (vypadá trochu jako zjednodušená kosmická loď, máte-li dostatek představivosti).

Tento speciální porovnávací operátor vrací 0, pokud jsou oba operandy sobě rovné, 1, pokud je větší levý operand, a -1, pokud je větší pravý operand. Říká se mu také ternární porovnávací operátor, který už existuje v jiných oblíbených programovacích jazycích, jako jsou Perl a Ruby.

ternární porovnávací operátor

Obrázek: Wiki.PHP.net

Operátor koalescence (operátor existence se zahrnutím hodnoty null) se zapisuje dvěma otazníky (??). Používá se tehdy, pokud chcete zkontrolovat, zda něco existuje, a vrátit nějakou výchozí hodnotu, pokud to neexistuje. Operátor koalescence vrací výsledek prvního svého operandu, pokud existuje a není null, a druhý operand ve všech ostatních případech.

Podívejte se, jak nový operátor redukuje čas trávený základními deklaracemi:

Operátor koalescence

Obrázek: Wiki.PHP.net

7. Precizní deklarace typů

Vždycky jste toužili zabránit nezamýšleným návratovým hodnotám tím, že deklarujete návratový typ funkce? Nuže, nový PHP 7 umožňuje vývojářům posílit kvalitu jejich kódu pomocí deklarací návratového typu.

Na obrázku níže máte znázorněný velmi jednoduchý případ užití, v němž se o funkci foo() předpokládá, že vrátí pole. Složitější příklady můžete prověřit zde.

foo

Obrázek: Wiki.PHP.net

Aby PHP 7 tuto schopnost ještě víc posílil, zavádí pro skalární typy čtyři nové deklarace typů: int, float, string a bool. Nové skalární typy umožňují vývojářům vyznačovat, že očekávají, že se vrátí celá čísla, čísla v pohyblivé čárce, řetězce, nebo booleovské hodnoty. Nové skalární typy zaváděné v PHP 7 budou také podporovat vodítka pro typy, která už od série PHP 5.X umožňují vývojářům vynutit typ parametrů.

8. Anonymní třídy

PHP 7 umožňuje používat anonymní třídy, což je v jiných objektově orientovaných jazycích, jako jsou C# a Java, už zavedená praktika. Anonymní třída je třída, která není pojmenovaná. Objekt, jehož instanci vytváří, má stejnou funkcionalitu jako objekt pojmenované třídy.

Používá se stejná syntax jako u tradičních PHP tříd, jen chybí název. Pokud se anonymní třídy používají řádně, mohou urychlovat jak kódování, tak i dobu vykonávání. Anonymní třídy jsou vynikající pro případy, že se nějaká třída používá během vykonávání pouze jednou, nebo jde o třídu, kterou není třeba dokumentovat.

Anonymní třídy

Obrázek: Wiki.PHP.net

9. Zjednodušují se importy z téhož jmenného prostoru

Nová schopnost deklarace skupinového použití (Group Use Declarations) bude přímo darem z nebes pro ty, kdo chtějí importovat mnoho tříd z téhož jmenného prostoru. Nová syntax redukuje upovídanost, činí kód úhlednějším a snadněji čitelným, a ušetří spoustu psaní na počítači.

Kód se bude také snadněji pročítat a ladit, protože skupinové deklarace pomáhají identifikovat importy, které náležejí do téhož modulu.

Group Use Declarations

Obrázek: Wiki.PHP.net

10. Úklid pracoviště

Cílem PHP 7 bylo uvolnit prostor pro zdokonalování, proto bylo nutné zbavit se mnoha zastaralých funkcionalit a starých a nepodporovaných SAPI a rozšíření. Pokud chcete podrobně zkontrolovat, které to jsou, klikněte zde a zde.

Všechny odstraněné položky už byly nějakou dobu v PHP 5 považované za zastaralé, proto jste je možná už dávno nepoužili. Berte ale prosím na vědomí, že pokud jste podědili nějaké aplikace běžící na starších verzích PHP, nový PHP 7 může případně kód porušit.

O autorovi

Anna Monus

Anna píše pro Hongkiat.com, je webová vývojářka a programátorka, zajímá se o vědu, umělou inteligenci a o technologie narušující status quo.

Článek byl původně zveřejněn na serveru Hongkiat.com

Přeložil: RNDr. Jan Pokorný

4 Příspěvků v diskuzi

  1. Nevíte zda bude možné v php 7 přetěžovat funkce stejně jak třeba v Javě nebo jestli to je vůbec v plánu
    př: nějak tímto způsobem
    function setPoint(int x, int y){
    this.x = x;
    this.y = y;
    }

    function setPoint(Point point){
    this.x = point.getX();
    this.y = point.getY();
    }

    protože nastavovat defaultní hodnoty paramatrů NENÍ přetížení jen ošetření vstupů který mě zase u Javy chybí.

    • Ja mam pocit, ze pretezovani na pocet argumentu uz funguje v php7… pretezovani na kokretni typ atributu asi nepujde nikdy.

Odpovědět