Во первых 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};

Декларация скалярных типов

Есть два вида декларации:

  1. Принуждающая — приводит к заданному типу

Код:

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)