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.