Во первых PHP 7 работает гораздо быстрее PHP 5.
Например Drupal 7 на 5ом PHP выполнит 182 запроса в секунду, а на 7ом уже 316.
Или возьмем для примера всеми любимый WordPress (4.1). На 5ом PHP это 191 запрос в секунду, а на PHP 7 это 374 запроса.
Значительный присорс, не так ли? Почти в два раза)
Но на этом его плюсы не заканчиваются. Далее мы рассмотрим новые возможности 7ой версии.
Оператор объединения с null
как было в 5ой версии
$username = isset($_GET[‘user’]) ? $_GET[‘user’] : ‘nobody’;
как стало в 7ой версии
$username = $_GET[‘user’] ?? ‘nobody’;
так-же данный оператор стало возможно использовать в цепочке проверок (поочередно)
$username = $_GET[‘user’] ?? $_POST[‘user’] ?? ‘nobody’;
то-есть сначало проверится $_GET[‘user’], если его нет то проверится $_POST[‘user’], ну а если и его нет, выдаст ‘nobody’.
Оператор spaceship (космический корабль)
это новый оператов сравнения <=> (меньше, больше или равно)
вернет 0 если равно
вернет -1 если первое меньше второго
вернет 1 если первое больше второго
Код:
<?php
// целые
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Рациональный
echo 1.5 <=> 1.5 // 0
echo 1.5 <=> 2.5 // -1
echo 2.5 <=> 1.5 // 1
// Строки
echo "a" <=> "a" // 0
echo "a" <=> "b" // -1
echo "b" <=> "a" // 1
?>
Задание констант массивов с помощью define()
если в PHP 5 константу типа arra можно было задать с помощью const, то в PHP 7 это можно делать через define()
Код:
<?php
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // cat
?>
и например если в 5ой версии для Базы данных мы использовали 4 разные константы, то в 7ой версии мы можем использовать одну (как пример)
было
Код:
define('DBHOST', 'localhost');
define('DBUSER', 'login');
define('DBPASS', 'password');
define('DBDASE', 'database');
стало
Код:
define('DB', [
'DBHOST' => 'localhost',
'DBUSER' => 'login',
'DBPASS' => 'password',
'DBDASE' => 'database'
]);
Групповые декларации use
Импортируемые из одного и того же namespace классы, функции и констанцы, теперь можно группировать в одном операторе use
как было
Код:
<?php
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
стало
Код:
<?php
use some\namespace\{ClassA, ClassB, ClassC as C};
Декларация скалярных типов
Есть два вида декларации:
- Принуждающая — приводит к заданному типу
Код:
function sum(int ...$ints)
{
return array_sum($ints);
}
var_dump( sum(2,3,5) ); // int(10)
- Строгая — проверяет соответствие типов
Код:
declare(strict_types=1);
function sum(int ...$ints)
{
return array_sum($ints);
}
var_dump( sum(2.3,5) ); // error ...
в строгой типизации, если результат не будет соответствовать нашему заданному типу, ты выдаст ошибку.
Для декларации могут быть использованы следующие типы:
- строки (string)
- целые (int)
- рациональный числа (float)
- логические (bool)
Декларация возвращаемых значений
Отличается от предыдущей своим синтаксисом
Код:
function sum($a, $b): int{
return $a + $b;
}
var_dump( sum(2.4, 3) ); // int(5)
Функция целочисленного деления intdiv()
делит два числа и выдает целочисленное число от результата
если в 5ой версии мы делал так
Код:
var_dump( (int)(10 / 3) ); // int(3)
то в 7ой версии это сделать можно проще
Код:
var_dump( intdiv(11, 3) ); // int(3)
Неправильный пример:
declare(strict_types=1);
function sum(int …$ints)
{
return array_sum($ints);
}
var_dump( sum(2,3,5) ); // error …
у вас в массиве все числа целые, а должны быть не только целые числа, чтобы код вернул ошибку.
Дмитрий, благодарю. Исправил.