PHP 7 – čo nového prináša

Nová verzia PHP prichádza vo verzii PHP 7. Určite si každý všimol, že sa nám niekde v číslovaní stratilo číslo 6, a to z toho dôvodu, že sa ho rozhodli vývojári preskočiť aby nedošlo k zmätkom keďže o PHP 6 už bolo napísané veľa článkov a kníh aj keď nikdy oficiálne nevyšla. Tiež nevydaná verzia PHP 6 mala priniesť podporu UNICODE.

Nová verzia PHP 7 je oveľa rýchlejšia. Je to vďaka prepracovaniu dátových štruktúr (phpng), veľkému refaktoringu a menšej pamäťovej náročnosti.

Typy návratových hodnôt

V PHP 7 je možné zapísať typ návratovej hodnoty priamo do definície funkcie. Ak funkcia vráti iný typ ako je zadefinovaný, tak PHP vráti chybu. Avšak je to závislé na nastavení declare(strict_types = 1);

<?php
function foo(): array {
    return [];
}

Typová kontrola pre skalárne dátové typy

V PHP sa dlho uvažovalo ako do neho pridať skalárne typy. Teraz už môžme zapísať definíciu ako príklade nižšie. V prípade neplatných dátových typov PHP vráti chybu „Argument 2 passed to add() must be of the type integer, string given, called in …“. Kontrola dátových typov avšak nie je zapnutá automaticky, ale je ju nutné ako v predchádzajúcom zapnúť pomocou declare(strict_types = 1);

<?php
function add(int $a, int $b) {
    return $a + $b;
}
add(1, 3);

V prípade zapnutia typovej kontroly sú dátové typy kontrolované aj u štandardných PHP funkcií. V prípade INT na FLOAT konverzia prebehne automaticky, avšak opačne FLOAT na INT vyhodí chybu.



Vznik výnimiek (TypeException) namiesto FATAL ERROR

Veľa miest v PHP bolo upravených tak, aby namiesto FATAL ERROR, už vznikla výnimka. Avšak výnimka TypeException nededí od Exception. Je to z dôvodu aby nedochádzalo k neodhaleným chybám kedy by aj tieto výnimky automaticky boli podchytené kódom „catch (Exception $e)“. Preto v PHP 7 vznikol nový predok výnimiek EngineException pre všetky výnimky.

BaseException (abstract)
 +- EngineException
 +- ParseException
 +- Exception
     +- ErrorException
     +- RuntimeException
         +- ...
     +- ...

Null Coalesce Operátor ??

Operátor otestuje prvý operand, a ak existuje tak ho vráti, ak nie vráti druhý operand. Namiesto zápisu

var_dump(isset($_GET['user']) ? $_GET['user'] : 'nobody');

stačí už napísať

var_dump($_GET['user'] ?? 'nobody');

SpaceShip – nový porovnávací operátor

Je to nový trojcestný porovnávací operátor, ktorý pri zhode vracia 0, ak je prvý menší vráti -1 a ak je prvý väčší vráti 1.

<?php // http://3v4l.org/VDBof
var_dump(1 <=> 1); // 0
var_dump(1 <=> 2); // -1
var_dump(2 <=> 1); // 1
var_dump(('a' <=> 'a')); // 0
var_dump(('a' <=> 'b')); // -1
var_dump(('b' <=> 'a')); // 1

CSPRNG – Generátor kryptograficky bezpečných náhodných čísel

Generovať dostatočne nepredikovateľné náhodné číslo nie je jednoduché. V PHP 7 pribudli dve funkcie na generovanie náhodných čísel a bajtov.

random_bytes(int length);
random_int(int min, int max);

Iné

Mimo iné v PHP 7 pribudla možnosť vypnutia errorov a zapnutia výnimiek pre assert(). Pribudli nové rezervované typy : int, float, bool, string, true, false, null. A taktiež bolo implementované nové rozšírenie pre JSON.

Čo z PHP 7 vypadlo?

  • Extension ext/ereg – nahradená ext/pcre
  • Extension ext/mysql – nahradená ext/mysqli a ext/pdo_mysql
  • Přiřazení new referencia: $a = & new Foo()
  • set_magic_quotes_runtime, magic_quotes_runtime
  • Možnost použití eval v preg_replace – nahradené preg_replace_callback
  • Komentáře začínající # v php.ini (správne je ;)
  • Warning pri nenastavenej časovej zóne
  • PHP 4 konštruktory (metódy s rovnakým názvom ako je názov triedy) – nateraz DEPRACATED
  • Alternatívne otváracie tagy <% a <script language=php> (krátke <? ostávajú)

Kde si nové PHP vyskúšať alebo prevádzkovať na ňom hosting?

Medzi webhostingové firmy na slovensku, ktoré už majú PHP 7 v ponuke partrí spoločnosť Webglobe – Yegon, s.r.o. www.webglobe.sk . V ich ponuke si na svojom novom hostingu môžete prepnúť verziu PHP na verziu 7, či už na celý hosting, alebo len pre testovanie napríklad na niektorej subdoméne.

Prajem veľa radosti s novým PHP 7.