Один оператор use может использоваться для импорта классов, функций и констант вместо использования оператора use несколько раз.
// до PHP 7
use com\tutorialspoint\ClassA;
use com\tutorialspoint\ClassB;
use com\tutorialspoint\ClassC as C;
use function com\tutorialspoint\fn_a;
use function com\tutorialspoint\fn_b;
use function com\tutorialspoint\fn_c;
use const com\tutorialspoint\ConstA;
use const com\tutorialspoint\ConstB;
use const com\tutorialspoint\ConstC;
// код PHP 7+
use com\tutorialspoint\{ClassA, ClassB, ClassC as C};
use function com\tutorialspoint\{fn_a, fn_b, fn_c};
use const com\tutorialspoint\{ConstA, ConstB, ConstC};
Новый оператор <=> (spaceship) используется для сравнения двух выражений. Оператор возвращает -1, 0 или 1, когда первое выражение меньше, равно или больше, чем второе выражение соответственно.
<?php
//сравнение целых чисел
print( 1 <=> 1);print("<br/>");
print( 1 <=> 3);print("<br/>");
print( 5 <=> 1);print("<br/>");
print("<br/>");
//сравнение чисел с плавающей запятой
print( 1.5 <=> 1.5);print("<br/>");
print( 1.5 <=> 3.5);print("<br/>");
print( 4.5 <=> 1.5);print("<br/>");
print("<br/>");
//сравнение строк
print( "a" <=> "a");print("<br/>");
print( "a" <=> "b");print("<br/>");
print( "b" <=> "a");print("<br/>");
?>
Код выводит следующее:
0
-1
1
0
-1
1
0
-1
1
Генерация чисел и строк осуществляется с помощью двух новых функций: random_bytes() и random_int().
random_bytes() генерирует строку произвольной длины криптографических случайных байтов, которые подходят для использования в криптографии, например, при генерации соли (секретных ключей), ключей или векторов инициализации.
string random_bytes ( int $length )
length — длина в байтах случайной строки, которая должна быть возвращена. Возвращает строку, содержащую запрошенное количество криптографических безопасных случайных байтов.
Если подходящий источник для генерации случайных данных не найден, будет выбрано исключение. Если указаны недопустимые параметры, будет введено TypeError. Если указана недопустимая длина байтов, будет выведено сообщение об ошибке.
$bytes = random_bytes(5);
print(bin2hex($bytes));
Код выводит следующее: 54cc305593.
random_int() генерирует криптографические случайные целые числа.
int random_int ( int $min , int $max )
Параметры
Возвращает криптографически безопасное случайное целое число в диапазоне от min до max, включительно. Если подходящий источник генерации случайных данных не может быть найден, будет введено исключение. Если указаны недопустимые параметры, будет введено TypeError. Если max меньше min, будет введено Error.
print(random_int(100, 999));
print("");
print(random_int(-1000, 0));
Код выводит следующее:
614
-882
Целочисленное деление осуществляется с помощью новой функции intdiv(), которая возвращает результат деления в формате целого числа.
$value = intdiv(11, 3);
var_dump($value);
print(" ");
print($value);
// возвращает
int(3)
3
Добавлен оператор объединения с null (??), являющийся синтаксическим сахаром для распространённой операции, когда совместно используются тернарный оператор и функция isset(). Он возвращает первый операнд, если он задан и не равен NULL, а в обратном случае возвращает второй операнд.
<?php
// извлекаем значение $_GET['user'] и возвращаем 'not passed'
// если имя пользователя не передано
$username = $_GET['username'] ?? 'not passed';
print($username);
print("<br/>");
// Эквивалентный код с использованием тройного оператора
$username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
print($username);
print("<br/>");
// Цепная операция ??
$username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
print($username);
?>
Данный код выведет следующее:
not passed
not passed
not passed
Добавлена новая функция — объявление возвращаемого типа. Объявление возвращаемого типа указывает тип значения, возвращаемого функцией. Мы можем объявлять следующие возвращаемые типы PHP: int, float, bool, string, interfaces, array, callable.
<?php
declare(strict_types = 1);
function retval(int $value): int {
return $value;
}
print(retval(9));
?>
Код выводит в браузере следующий результат: 9
Если заменить строчку return $value + 1.1; и вызвать ещё раз, то получим ошибку Fatal error: Uncaught TypeError: Return value of retval() must be of the type integer, float returned in....
Таким образом, вы можете писать аккуратный код, следя за типами переменных.
С помощью функции define() стало возможным определить массив констант. В PHP 5.6 это можно было сделать с помощью функции const().
<?php
//определим массив с помощью функции define()
define('animals', [
'dog',
'cat',
'bird'
]);
print(animals[1]);
?>