Światło dzienne ujrzała już najnowsza wersja PHP 7. Ostatnio jak pamiętamy mieliśmy do czynienia z PHP w wersjach > 5.6.x. Wydanie 6-tki po wielu perypetiach i kilkuletnich pracach zostało zarzucona i ostatecznie po wznowieniu prac przemianowano wersję na 7.

Mamy więc do czynienia ze sporym przeskokiem jeśli chodzi o numerację wersji. Spróbujmy sprawdzić co nowego pojawia się w najnowszej wersji i na ile zmieni/poprawi to działanie PHP.

Scalar/return type declarations

Jedną z pierwszych wymienianych przez dokumentację nowych właściwości jest wprowadzenie możliwości wskazywania typów argumentów przyjmowanych przez funkcję oraz przez nią zwracanych. Możliwe do określenia są nastepujące typy: string, int, float, bool. Oczywiście pozostają te, które były już odstępne w wersji PHP 5, czyli poprzez nazwy klas, interfejsów, array oraz callable.

W sytuacji, gdy przekazywany argument będzie innego typu niz zdefiniowany, zostanie zwrócony wyjątek TypeError – w wersji PHP 5 zwracany był fatal error.

<?php

function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

?>

Spaceship operator

Wprowadzono nowy operator porównania <=> określany jako spaceship (T_SPACESHIP). Zasada działania jest dość prosta. Przy porównaniu dwóch wartości wynikiem działania jest:

  • -1 gdy prawa strona jest większa niż lewa
  • 0 gdy wartości są sobie równe
  • 1 gdy lewa strona jest większa niż prawa
<?php

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

?>

Null coalescing operator

Kolejnym nowym operatorem, który został dodany jest ??NULL COALESCE OPERATOR. Zwraca wartość znajdującą się po jego lewej stronie w sytuacji, gdy jest ona inna niż null. W przeciwnym wypadku zwracana jest wartość po stronie prawej. W niektórych przypadkach pozwala to na skrócenie zapisu, gdy wykorzystywany był operator ? : Operacje z wykorzystaniem tego operatpora mogą być łączone.

<?php

$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';

?>

Constant arrays using define()

Dodano możliwość definiowania tablic jako stałych w ramach dyrektywy define(); Rozszerzyło to funkcjonalność z PHP 5, gdzie doefiniowanie tablic było możliwe za pomocą dyrektywy const.

<?php

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

?>

intdiv()

Wprowadzona została nowa funkcja intdiv(), zwracająca wartość całkowitą z dzielenia. Warto pamiętać, że otrzymujemy wartość całkowitą, a nie zaokrąglony wynik!

<?php
var_dump(intdiv(10, 3));
?>

 Wynikiem działania będzie:

int(3)

To jedynie niektóre z nowych funkcjonalności. Warto zapoznać się również z nowymi funkcjami, tymi które zostały zmienione, czy zmianami niekompatybilnymi wstecz.

Warto również wspomnieć, że w PHP 7 deklarowane jest znacznie zwiększenie wydajności działania, co z pewnością nie tylko przełoży się na prędkość działania aplikacji, ale również miejmy nadzieję, spowoduje odciążenie serwerów. Zyskamy dzięki temu np. większy margines bezpieczeństwa, jeśli chodzi o nieprzerwaną pracę serwisów.