PHP 7: Что нового?

Оператор use

Один оператор 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

Новый оператор <=> (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 — минимальное значение, которое может быть возвращено, оно должно быть больше или равно PHP_INT_MIN
  • max — максимальное значение, которое может быть возвращено, оно должно быть меньше или равно PHP_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

Добавлен оператор объединения с 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()

С помощью функции define() стало возможным определить массив констант. В PHP 5.6 это можно было сделать с помощью функции const().


<?php
    //определим массив с помощью функции define()
    define('animals', [
       'dog',
       'cat',
       'bird'
    ]);
    print(animals[1]);
?>
Реклама