Мобильная
версия

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

Дата: Категория: PHP

Уже ни для кого ни секрет что следующая версия 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. А пока, до официального релиза есть время, можно смело собирать тестовую версию, и проверять свой код в новой среде обитания.

Теги: #php, #php7

Ваша оценка:

Рейтинг: 9.3 (Оценок: 6)

Комментарий:

Copyright © DOC_tr 2015-2017 г. Все права защищены
Яндекс.Метрика
Перейти к мобильной версии