Ś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.