PHP 7. Краткий обзор

Уже ни для кого ни секрет что следующая версия PHP будет 7, и появится она очень скоро.
Пока ее можно собрать самому и протестировать на ней свой код – достаточно полезная штука для тех, кто любит все новое и после выхода планирует в ближайшее время перейти на новую версию.

В этой статье я хочу кратко рассмотреть особенности 7 версии, и разобраться что в ней хорошего, а что плохого.

Ну что ж, тогда сразу приступим к делу.
Первая из фич, о которых я хочу рассказать – это производительность.

Производительность

Тесты PHP7 показывают что по скорости он находится на одном уровне с HHVM – своего рода компилятором php от фейсбука.
PHP7 не будет иметь своего компилятора, и такой прирост производительности в ~10% (местами достигает 30%) возможен благодаря phpng. О нем вы можете почитать здесь и здесь.

Скалярный type-hint и возвращаемые значения

Ни для кого ни секрет что в php, в функциях можно указывать тип принимаемых значений. Все было бы отлично если б не одно но – его возможность слишком ограничена. Теперь можно указывать также и скалярные типы – int, float, bool, string

По умолчанию это будет работать не в строгом режиме – то есть если вы передадите в функцию принимающую int строку с числом, то все пройдет нормально. Косяки могут возникать только тогда, когда в функцию принимающую int вы передадите не целое число float. Оно в таком случае автоматически приведется к int

function sendHttpStatus(int $statusCode, string $message) { 
    header('HTTP/1.0 ' .$statusCode. ' ' .$message); 
}

sendHttpStatus(404, “File Not Found”);
sendHttpStatus(“403”, “OK”); // string “403” стала int 403

Если нужна строгая типизация – то можно просто указать в файле

declare(strict_types=1);

И после этого на 6 строке нашего кода будет критическая ошибка – “Catchable fatal error: Argument 1 passed to sendHttpStatus() must be of the type integer, string given

Еще PHP7 может принимать тип возвращаемого значения, куда также можно добавлять скалярные типы. Синтаксис вызова – двоеточие с аргументом-суффиксом перед скобками.

function isValidStatusCode(int $statusCode): bool {
    return isset($this->statuses[$statusCode]); 
}

В данном примере :bool указывает что функция должна вернуть булево значение.

Операторы

Добавлен новый оператор сравнения – <=>
Если левый оператор больше, то он возвращает -1, если они равны, то 0, а если правый, то 1

$a = 1;
$b = 0;

$a <=> $b; // выведет -1
$b ++; // $b = 1
$a <=> $b; // выведет 0
$b ++; // $b = 2
$a <=> $b; // выведет 1

По мне так отличный оператор. Если раньше нужно было писать что-то типа

function order_func($a, $b) { 
    return ($a < $b) ? -1 : (($a > $b) ? 1 : 0); 
}

то в PHP7

function order_func($a, $b) { 
    return $a <=> $b; 
}

Помимо этого добавлен еще один интересный оператор – ??
Если левый операнд имеет значение NULL, то возвращается правый. Если нет, то возвращается левый.

Отличный пример использования – прохождение по цепочке переменных, чтобы вернуть первую ненулевую

$config = $config ?? $this->config ?? static::$default

Группировка деклараций use

Бывало такое, что нужно подключить много классов из одного и того же пространства имен? Если за вас это делала IDE, то супер. А если нет?
В PHP7 можно объединять декларирование use, что несомненно повлияет на скорость работы и сделает код намного читабельнее.
Если раньше приходилось делать так

use Project/Component/ClassA;
use Project/Component/ClassB;
use Project/Component/ClassC;

То в новом PHP можно делать так

use Project/Component/{
   ClassA,
   ClassB,
   ClassC
}

Вот, пожалуй, немного интересных изменений, которые готовят нам разработчики PHP7. А пока, до официального релиза есть время, можно смело собирать тестовую версию, и проверять свой код в новой среде обитания.

[Всего голосов: 0    Средний: 0/5]

Добавить комментарий

Ваш e-mail не будет опубликован.