3 grudnia 2015 została wydana oficjalna wersja PHP 7.0.0., w której wydajność w stosunku do PHP 5.6 została zwiększona nawet dwukrotnie. W końcu programiści PHP doczekali się możliwości wskazywania typów argumentów metod oraz typów zwracanych przez funkcje i metody.
0to spis funkcjonalności dzięki którym wiemy, że PHP7 jest rewolucją.
1. Wydajność
Jedną z największych zmian w PHP7 jest przyśpieszenie, nowa wersja jest ponad dwukrotnie szybsza od poprzednika oraz zużywa również mniej pamięci. To dla hostingowców na pewno niezły prezent, ponieważ teraz ich maszyny mogą bez żadnych dodatkowych kosztów i problemów zmierzyć się z większym ruchem.
Poniżej znajduje wykres obrazujący wyniki testów wykonanych z PHP 5.6 jak i z PHP7. Różnica jest piorunująca.
2. Ujednolicenie składni
Jednym z wielu skarg użytkowników języka PHP było brak konsekwencji w składni. Jedne operacje wywoływały błędy, a drugie operacje były dozwolone, co powodowało frustrację wśród programistów. Najnowsze wydanie PHP 7 w końcu rozwiązało ten problem. Dodano wiele operacji, które sprawiają,że składnia staje się bardziej zwarta. Pozwoli to między innymi na pełniejsze wykorzystanie programowania funkcyjnego. Poniżej przykład zastosowania wraz z wynikiem, który pojawia się po skompilowaniu kodu w PHP 5.4 oraz PHP 7.0:
[php]
$apply = function ($fun) {
return function ($a) use ($fun) {
return $fun($a);
};
};
$add = function ($x) {
return function ($y) use ($x) {
return $x + $y;
};
};
echo $apply($add)(2)(3);[/php]
Wynik:
PHP 7: 5
PHP 5.4: Parse error: syntax error, unexpected ‘(‘, expecting ‘,’ or ‘;’ in …
3. Wyjątki zamiast błędów krytycznych
Od wersji 7 błędy krytyczne są zgłaszane jako wyjątki silnika, które będą mogły być łapane i obsługiwane jak wszystkie pozostałe wyjątki.
[php]function add(int $a, int $b) : int
{
return $a + $b;
}</code>
[php]try {
echo add(2, "trzy");
} catch (EngineException $e) {
echo $e->getMessage(); //Argument 2 passed to add() must be of the type integer, string given …
}
[/php]
Wprowadzone zostały dwa nowe typy wyjątków, dla wewnętrznych EngineException błędów silnika oraz ParseException dla błędów składniowych.
4. Deklaracje dla typów skalarnych
Rewolucyjną zmianą w PHP7 jest dodanie deklaracji dla typów skalarnych, deklarowane będą mogły być łańcuchy znaków (string), liczby całkowite (int) i zmiennoprzecinkowe (float) oraz typy logiczne (boolean). Sprawdzanie typów jest dostępne w dwóch wersjach coercive – dopuszczającym rzutowanie i strict – dopuszczająca tylko dokładny typ.
5. Deklaracje dla typów zwracanych
Kolejną przełomową zmianą wprowadzoną w PHP7 jest wprowadzenie deklaracji dla typów zwracalnych.Typy które są dostępne to: ciągi znaków (string), liczby całkowite (int) i zmiennoprzecinkowe (float), typy logiczne (bool), tablice (array), typ callable, typ self (tylko dla metod), typ parent (tylko dla metod), domknięcia (Closure), a także klasy i interfejsy.
Oto przykład deklaracji typu zwracalnego:
[php]function add(int $x, int $y) : int
{
return $x + $y;
}[/php]
6.Klasy anonimowe
Klasy anonimowe, które są stosowane między innymi w języku Java, teraz są też dostępne w PHP7.Kiedy one mogą być użyte:
1. Gdy klasa nie musi być udokumentowana,
2. gdy klasa jest wykonana i użyta tylko raz
Anonimowa klasa to klasa bez zdefiniowanej nazwy, ma taką samą składnie jak klasa z nazwą oraz nie różni się od niej.
[php]var_dump (new class($i) {
public function __construct($i) {
$this->i = $i;
}
});[/php]
7. Nowe operatory: połączonego porównania (Combined Comparison / Spaceship) oraz trójkowy isset (Trenary isset / Null Coalesce)
PHP 7 wprowadza nowe operatory, dzięki którym będzie można prościej przeprowadzać operacje. Pierwszym z nich jest spaceship czyli operator połączonego porównania.Pozwala na trójkowe porównanie wartości (mniejszy, większy,równy)
var_dump(1 <=> 2); // int(-1)
var_dump(‘PHP7’ <=> ‘PHP7’); // int(0)
var_dump(‘PHP7’ <=> ‘PHP6’); // int(1)
var_dump([1,2,3] <=> [3,4,5]);
Drugim operatorem jest trójkowy isset, używana jest ona do sprawdzenia czy wartość istnieje i czy nie jest równa null.
$page = $_GET['page'] ?? 1; // $page = isset($_GET['page']) ? $_GET['page'] : 1;
Operator ten może być również łączony w łańcuchy
$email = $_POST['email'] ?? $user['email'] ?? 'user@esky.pl';
8. Grupowanie deklaracji use
Grupowanie deklaracji use pozwala na wygodny, skrócony sposób importować nazwy tej samej przestrzeni nazw
// PHP5+
use Esky\Blog\Post;
use Esky\Blog\Author as User;
use Esky\Blog\Comment;
// PHP7
use Esky\Blog\{Post, Author as User, Comment};
Tak więc zmiany, które zostały wprowadzone sprawiają, że praca z nowym wydaniem PHP bardzo zachęca. Pozostaje mi zachęcić Was do samodzielnej zabawy z nową wersją, eksperymentów oraz samodzielnej kompilacji, źródło do rozpoczęcia pracy znajdziecie na stronie.
W trakcie pracy można się dowiedzieć więcej ciekawych rzeczy na temat nowego silnika PHP,jego możliwościach oraz sposobie.
Ja jestem podekscytowany!
Strony internetowe powinno się pisać w idealnym Qt5!
W nim nie ma problemów z wydajnością. Jedynym problemem są janusze biznesu z kiepskimi rozwiązaniami tworzonymi po kosztach.
To nie żarty! Podobno testują już Qt5 na międzynarodowej stacji kosmicznej!
Kurcze, dawno nie śledziłem zmian w PHP, a tu takie cuda się dzieją :)