PHP

PHP: Novinky ve verzi PHP 7

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:

Graf: Porovnání počtu odbavených požadavků za sekundu pro verze PHP 5.6 a PHP 7, doplněno o srovnání s technologií PHP HipHop Virtual Machine (HHVM).

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.

Zdroje

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *