Za nami premiera kolejnej wersji PHP. Oznaczona została numerem 7.1 i wprowadzana jest na rynek po mniej więcej roku od daty poprzedniej dużej premiery, czyli wersji 7.0. W najnowszej wersji znajdziemy kilka interesujących zmian. Cześć z nich stanowi niejako rozszerzenie poprzednio udostępnionych funkcjonalności, inne są całkowicie nowe. Oto ich krótki opis.

Nullable types

Dla wporowadzonej poprzednio funkcjonalności deklarowania typów parametrów przyjmowanych przez funkcje i zwracanych wartości dodano możliwość określania ich jako nullable, poprzez dodanie przed nazwą typu znaku zapytania ?

<?php

function testReturn(): ?string
{
    return 'elePHPant';
}

function test(?string $name)
{
    var_dump($name);
}

?>

 W przypadku, gdy nie zostanie przekazany do funkcji parametr lub nie zostanie zwrócona żadna wartość zostanie wywołany fatal error.

Void functions

Umożliwione zostało określenie funkcji jako nie zwracającej żadnej wartości – void. Należy zwrócić uwagę na fakt, że zwracanie przez tak zdefiniowaną funkcję wartości NULL oznacza zwrócenie błędu.

<?php

function swap(&$left, &$right): void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

?>

 Symmetric array destructuring – Support for keys in list()

Rozszerzono funkcjonalność destrukcji tablic wyrażeniem funkcją list() – dopuszczono zapis skrócony [] (nawiasy kwadratowe) oraz dodano możliwość definiowania kluczy dla tej funkcji. To de facto dwie nowe funkcjonalności, których wykorzystanie jest również możliwe bezpośrednio np. w ramach instrukcji foreach

<?php

$data = [
    ["id" => 1, "name" => 'Tom'],
    ["id" => 2, "name" => 'Fred'],
];

// list() style
list("id" => $id1, "name" => $name1) = $data[0];

// [] style
["id" => $id1, "name" => $name1] = $data[0];

// list() style
foreach ($data as list("id" => $id, "name" => $name)) {
    // logic here with $id and $name
}

// [] style
foreach ($data as ["id" => $id, "name" => $name]) {
    // logic here with $id and $name
}

?>

 Multi catch exception handling

Ciekawą nowością jest również możliwość przechwytywania kilku wyjątków w ramach instrukcji catch(). Służy do tego znak „|

<?php

try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
}

?>

 

To jedynie część zmian w PHP 7.1 Moim zdaniem warto zapoznać się ze zmianami niekompatybilnymi wstecz – jest ich całkiem sporo. Może to nas uchronić przed niepotrzebymi niespodziankami przy zmianie silnika naszych aplikacji.