PHP 7 – najważniejsze nowości

PHP 7 jest średnio 2 razy szybszy od poprzednika (testy na popularnych aplikacjach takich jak Magento, Drupal, WordPress, SugarCRM) oraz zużywa mniej pamięci. Co nowego w PHP 7:

Tryby sprawdzania typów argumentów

Domyślnym trybem w PHP 7 jest coercive czyli dopuszczający rzutowanie, np. string „8” będzie zamieniony na liczbę 8 podczas podstawiania do funkcji, w której zadeklarowano typ liczbowy. Można natomiast ustawić tryb strict czyli ścisły, dopuszczający tylko dokładny typ argumentu. W takim przypadku zostanie wyrzucony wyjątek, który można obsłużyć, w przeciwieństwie do starszych wersji PHP, gdzie otrzymalibyśmy błąd Fatal Error. Tryb ścisły deklaruje się dla każdego pliku osobno wpisując w wierszu pod tagiem otwierającym php:

declare(strict_types=1);

Trybu coercive nie trzeba deklarować gdyż jest to tryb domyślny.

Zostań Profesjonalistą W Tworzeniu Aplikacji Webowych! Zapisz Się Na Kurs Laravel nauczysz się również tworzyć aplikacje hybrydowe na smartfony

Deklaracje dla typów skalarnych w PHP 7

Jako argument funkcji może być zadeklarowany łańcuch typów skalarnych. Podczas wywołania funkcji poszczególne parametry oddziela się przecinkami.

function sumOfInts(int ...$ints)
{
 return array_sum($ints);
}

try { 
var_dump(sumOfInts(2,'9',4.1,7,8,9));
} catch (Error $ex) { 
 echo $ex;
}

Jeśli powyższy przykład wykonamy w trybie strict, to wykona się blok catch, ponieważ użyliśmy typu string podczas wywołania funkcji. Bez obsługi wyjątków otrzymamy błąd Fatal Error dotyczący nieobsłużonego wyjątku.

Deklaracje dla typów zwracanych w PHP 7

Typ zwracany deklarujemy po dwukropku obok nawiasu z definicją funkcji.

function sum(int ...$numbers): int
 {
 return array_sum($numbers);
 }

try {
 $total = sum(3, 4, '6');
 echo $total;
 } catch (Error $typeErr) {
 echo $typeErr;
 }

W przypadku liczby zwracanej innej niż całkowita zostanie ona zamieniona na liczbę całkowitą oraz w zależności od konfiguracji serwera – zostanie wyświetlone ostrzeżenie o błędnym typie.

Zagnieżdżenie wywołania funkcji, funkcje samowywołujące się

function x()
{
    return function() {
        
        return function ($c){
            
            return 2+4+$c;
            
        };
    };
}
echo x()()(5);

Z powyższej własności wynika możliwość samowywoływania się funkcji:

(function ($a,$b) {
 echo $a + 3 + $b;
 })(2,1);

Klasy anonimowe

function d($x)
 {
 var_dump( $x->sd() );
 }

d( new class {

public function sd()
 {
 return 'x';
 }

});

Nowe operatory

Operator porównania zwracający jedną z trzech wartości 1,0,-1:

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]); // int(-1)

Operator trójkowy (Null coalescing operator):

$page = $_GET['page'] ?? 1; // odpowiednik $page = isset($_GET['page']) ? $_GET['page'] : 1;
$email = $_GET['email'] ?? $_GET['name'] ?? 'email@email.com';

Grupowanie deklaracji use

// starsze wersje php
 use Netprogs\Blog\Post;
 use Netprogs\Blog\Author as User;
 use Netprogs\Blog\Comment;

// PHP7
 use Netprogs\Blog\{Post, Author as User, Comment};

Tablice stałych

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

echo ANIMALS[1];

Wyświetlanie znaków Unicode kodowanych w UTF-8

echo "\u{9999}"; // 香
echo "\u{1F49A}" // 💚

Bezpieczne filtrowanie funkcji unserialize

class A {}
 $foo = serialize(new A);

// zamienia wszystkie obiekty na __PHP_Incomplete_Class
 $data = unserialize($foo, ["allowed_classes" => false]);
 var_dump($data);

// zamienia wszystkie obiekty na __PHP_Incomplete_Class z wyjątkiem MyClass i MyClass2
 $data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]]);
 var_dump($data);

// domyślne zachowanie (to samo gdy pominiemy drugi argument), które akceptuje wszystkie klasy
 $data = unserialize($foo, ["allowed_classes" => true]);
 var_dump($data);

Nowe funkcje

Spośród kilku nowych funkcji w PHP 7 są dostępne dwie kryptograficznie bezpieczne funkcje do generowania losowych liczb random_int oraz ciągu znaków random_bytes:

echo bin2hex(random_bytes(10)); // losowy ciąg znaków
echo random_int(1,100); // losowa liczba z przedziału 1-100
zapisz się na kurs Laravela >>>> lub program partnerski
Share

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *