PHP 7 nadchodzi w tym roku, a wraz z tą wersją masa zmian i nowych funkcjonalności. Wprowadzone zostały nowości takie jak scalary type hinting, explicit return value type, spaceship operator, combined comparsion operatori wiele innych. W tym wpisie postaram się przedstawić najważniejsze zmiany i nowości w php7.
Dlaczego PHP 7, a nie PHP 6
Obecnie najnowszą wersją PHP jest 5.6, PHP 6 istniało w wersji eksperymentalnej od 2005 roku i zostało porzucone w 2010. Powstało wiele książek na temat PHP 6 dlatego też stworzono specjalne RFC, społeczność PHP zdecydowała, że mogło by powstać zamieszanie gdyby wersja PHP została wprowadzona jako 6, dlatego też zdecydowano w głosowaniu by nowa wersja PHP widniała z numerem siedem.
Więcej o powodach znajdziecie tutaj
Wydajność PHP 7
Twórcy PHP 7 chwalą się wydajnością 2x szybszą niż wcześniejsze wersje. Ale wiadomo jak to jest z benchmarkami, które są robione tak by wypadły jak najlepiej. Silnik PHP7 został przepisany. Został oparty na PHP NG(Next Generation). Twórcy chwalą się wzrostem wydajności od 20-70% bez przepisywania linii kodu. Wydajność PHP została zwiększona poprzez zmniejszenie ilości instrukcji procesora wymaganych do odpalenia aplikacji i tak np. strona główna Wordpress-a wymagała 9.4 biliona operacji by się urchomić, a nowa wersja zmniejsza liczbę instrukcji do 2.6 biliona czyli 72% Na pewno PHP7 przyspieszy działanie aplikacji, jeśli użyjemy takich nowości jak np. określenie typu zwracanej wartości oszczędzi to pracę interpreterowi języka i aplikacja przyspieszy. Jak będzie zobaczymy, ja jestem dobrej myśli.
Więcej na https://www.zend.com/en/resources/php-7
Nowe funkcje języka PHP 7
W PHP 7 jest dość dużo nowości. Aby w pełni korzystać z języka i przyspieszyć aplikację powinniśmy użyć funkcji
declare(strict_types=1);
Linia ta musi być umieszona jako pierwsza i powoduje, że typy danych przekazywanych do metod, funkcji muszą być takie jak te zadeklarowane.
Przykład:
<?php declare(strict_types=1); function sumOld($a, $b) { return $a + $b; } function sumNew(int $a, int $b) : int { return $a + $b; } echo sumOld("10 abc", 5); //dziala wynik 15 poniewż string jest castowany do 10 echo sumNew("10 abc", 5); //blad zly typ pierwszego argumentu echo sumNew(10, 5); //wszystko ok wynik 15 echo sumNew("10", 5); //bląd zły typ pierwszego argumentu echo sumOld("10", 5); //dziala wynik 15
Dzięki trybowi „strict” możemy wychwycić wiele błędów na etapie programowawnia. Koniec z żartami, że w c++ błedy wyłapuje kompilator a w PHP klient!
Spaceship operator
Statki kosmiczne wkraczają do PHP. Spaceship operator to nowy operator w PHP, który ułatwia nam porównywanie.Operator działa bardzo prosto. Załóżmy, że mamy zmienne $a oraz $b, instrukcja $a <=> $b zwróci nam -1 jeśli a jest mniejsze od $b, +1 jeśli $a jest większe niż $b lub 0 jeśli są równe. Jest to niezwykle przydatne w funkcjach sortujących wykorzystujących callbacki. Tym bardziej, że domyślnie działa na większości typów wbudowanych takich jak int, float, bool, array itp.
Przykład:
//PHP 5.6 function sortuj($a, $b) { return ($a < $b) ? -1 : (($a > $b) ? 1 : 0); } // PHP 7 function sortuj($a, $b) { return $a <=> $b; }
powyższy kod w obu przypadkach zwróci to samo, jednakże czytelność wzrasta.
Obsługa błedów
Tutaj zmiany są ogromne. Po pierwsze, mamy dwie rodziny wyjątków te wynikające z błędów programisty, który nie zabezpieczył kodu. Przykład to wywołanie metody na obiekcie który nie istnieje. Takie błędy mogą być łatwo obsłużone dzięki Engine Exceptions. Mamy teraz dostęp do wyjątków takich jak: \ParseException, \BaseException, \TypeException, \EngineException dzięki nim możemy w prosty sposób obsłużyć błedy aplikacji i odpowiednio na nie zareagować.
Null Coalescing Operator
Kolejna nowość to operator, który pozwala nam sprawdzić czy dana wartość jest nullem jeśli tak to zwróci domyśłną wartość, jeśli nie to zwróci wartość pod zmienną przykład:
<?php $userId = $_GET['id'] ?? -1; //jesli nie jest przekazane ID w URL to $userId będzie równy -1 // bardziej zaawansowany przykład który w przypadku gdy artykuł o danym ID nie istnieje zwróci domyślny artykuł $articleRepository = new ArticleRepository(); $page = $articleRepository->get($request->get('id')) ?? $articleRepository->getDefaultPage();
To by było na tyle w tym wpisie, w kolejnych postaram się przedstawić inne nowości w PHP 7. W ramach ciekawostki mogę napisać, że Symfony2 w nowej wersji jest w pełni kompatybilne z PHP7.
Tak więc drodzy programiści do pracy, w tym roku dwie gorące premiery PHP7 oraz Symfony2. Jeśli masz jakieś sugestie lub znalazłeś błąd to zapraszam do komentowania.
Zainstalowałem sobie ostatnio nowego xampp’a z php 7 (pozostałe składowe w starych wersjach), efekt – każde użycie session_start() crash’uje server (nawet gdy jest to jedyne wyrażenie w pliku). Wie ktoś o co chodzi i jak temu zapobiec? Czy ktoś napotkał inne kwiatki z php7?
Być może miałeś do czynienia z bugiem -> https://bugs.php.net/bug.php?id=71683
Cześć, jeśli chodzi o PHP 7 to ten temat był szeroko poruszany na PHPersach w Poznaniu. Wklejam link do tego filmiku i polecam obejrzeć: https://www.youtube.com/watch?v=g3caJBJ_IrQ
Czy nie lepiej skondensować wszystkie różnice w jeden artykuł? Potrzebuję zebrać takie informacje w najbliższym czasie. Tutaj jest ok, ale trochę niewygodnie, poza tym BARDZO OK.
Przy następnej wersji postaram się tak zrobić, aczkolwiek tych zmian jest dużo