Nejen na světě, ale již i na webových serverech je běžně k dispozici nová verze oblíbeného programovacího jazyka PHP 7.
Jaké novinky a vylepšení nová verze přináší?
Rychlost a výkon
Nejvíce se v rámci přechodu na novou verzi PHP mluví o rapidním zvýšení rychlosti.
Podle dostupných testů došlo při přechodu na novou verzi PHP až k dvojnásobnému zvýšení výkonu:

Více na: Get performance insight into the upcoming release of PHP 7
Nový Zend engine
PHP 7 běží na nové verzi open-source skriptovacího enginu Zend s označením PHPNG (next generation).
Více na: PHPNG (next generation)
Deklarace typu vstupních parametrů funkcí
Při definici funkce lze deklarovat datové typy vstupních parametrů ve skalární podobě.
Jinak řečeno, konečně můžeme při zápisu funkce snadno stanovit, že tato přijímá hodnoty pouze daného datového typu, např. celé číslo:
function secti(int $a, int $b) { return $a + $b; }
Striktní kontrolu datových typů je však třeba nejprve vynutit:
declare(strict_types=1);
V případě vložení hodnoty odlišného datového typu PHP zobrazí chybu typu TypeError.
Pozor: pokud striktní datovou kontrolu zapneme, bude použita i při volání standardních funkcí:
substr(123, 1, 3); // substr() expects parameter 1 to be string, integer given
Automatická změna typu bez vyvolání chyby proběhne jen v případě převodu typu integer na float.
Pokročilé editory typu PhpStorm nás na případné vložení hodnoty neočekávaného typu upozorní již při psaní kódu:
Deklarace typu návratové hodnoty funkcí
Podobně jako typy vstupních parametrů funkcí, můžeme deklarovat očekávaný typ hodnoty výstupní:
function secti(int $a, int $b): int { return $a + $b; }
Více na: PHP RFC: Return Type Declarations
Konstanta typu array
Deklarace konstanty typu array:
define('JAZYKY', [ 'Angličtina', 'Němčina', 'Španělština' ]); echo JAZYKY[0]; // Angličtina
Operátor <=> (spaceship)
Porovnává dvě hodnoty a na základě výsledku vrací jeden ze tří stavů:
- pokud se hodnoty rovnají: 0
- pokud je první operand větší: 1
- pokud je první operand menší: -1
echo 1 <=> 1; // 0 echo 2 <=> 1; // 1 echo 1 <=> 2; // -1
Více na: PHP RFC: Combined Comparison (Spaceship) Operator
Anonymní třídy
Anonymní třída nemá žádný název. Je deklarována a rovnou použita na daném místě kódu.
var_dump(new class($i) { public function __construct($i) { $this->i = $i; } });
Použití anonymních tříd je v objektově orientovaných jazycích (Java, C#) běžné.
Více na: PHP RFC: Anonymous Classes
Speciální hodnota při NULL
Více na: PHP RFC: Null Coalesce Operator
Escapování unicode znaků
Více na: PHP RFC: Unicode Codepoint Escape Syntax
Filtrování tříd při deserializaci
Filtrování tříd lze využít např. při deserializaci objektů z nedůvěryhodného zdroje.
Běžná deserializace:
$data = unserialize($foo);
Převod všech objektů do objektu __PHP_Incomplete_Class:
$data = unserialize($foo, ["allowed_classes" => false]);
Zachování vybraných tříd:
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);
Zachování všech tříd:
$data = unserialize($foo, ["allowed_classes" => true]);
Více na: PHP RFC: Filtered unserialize()
Skupinový import tříd
Třídy z totožného jmenného prostoru lze nyní importovat pomocí jediného operátoru use:
use App\Models\{Class1, Class2, Class3 as C3};
Více na: PHP RFC: Group Use Declarations
Zachytávání systémových výjimek
Nyní lze zachytávat i systémové výjimky, které ve starších verzích vyhazují chybu typu Fatal Error:
try { call_method(null); catch (EngineException $e) { echo "Exception: {$e->getMessage()}" }
Více na: PHP RFC: Exceptions in the engine (for PHP 7)
Podpora 64 bitových systémů
PHP 7 zavádí konsistentní 64 bitovou podporu:
- nativní podpora 64 bitových celých čísel
- nativní podpora i velkých souborů
Odstranění zastaralých functionalit
Mnoho zastaralých funkcionalit bylo odstraněno.
Na to je třeba myslet při upgrade verze PHP na serverech na kterých běží aplikace napsané ve starších verzích PHP.
Více na PHP RFC: Remove deprecated functionality in PHP 7
Více na PHP RFC: Removal of dead or not yet PHP7 ported SAPIs and extensions
A co je vlastně s PHP verze 6?
Verze PHP 6, která zahrnovala některá vylepšení, jako podpora Unicode, nebyla nikdy vydána. Aby se předešlo nejasnostem s jednotlivými verzemi, byla nově vydaná verze označena jako PHP 7.