Что нового в php 7
Скорость php 7 по сравнению с php 5 увеличилась почти 3 раза, а реально в 2 раза. Такой резкий скачок произошёл в том числе и из-за кэширования, которое часто мешает, его можно отключить или в php.ini (ищем через phpinfo();) если сервер локальный или в .htaccess:
Отключаем кэширование в php 7
php_flag opcache.enable off
php_flag xcache.cacher off
Пространства имен в PHP 7
Пространства имен в PHP 7 можно теперь использовать так...
<?php
use Gena\papka1;//Пространства имен в PHP - раньше
use Gena\papka2;
use Gena\{//теперь можно так...
papka3,
papka4,
papka5
};
...
?>
Условие ?? - определена ли переменная:
<?php
//$var='Переменная определена';
echo $var ?? 'Переменная НЕ определена';
?>
Можно проверять сразу много переменных:
//$var1='Переменная определена 1';
//$var2='Переменная определена 2';
//$var3='Переменная определена 3';
echo $var1 ?? $var2 ?? $var3 ?? 'Переменные НЕ определены';//Если ВСЕ НЕ определены
Если хоть одна переменная определена, то будет отдавать значение первой определенной переменной.
Оператор спейcшип - <=>
Оператор spaceship (космический корабль). Этот оператор предназначен для сравнения двух выражений и возвращает только три варианта ответа:
- -1 - если меньше
- 0 - если равно
- 1 - если больше
echo 1<=>2;//-1, 1 меньше 2
echo 2<=>2;// 0, 2 равно 2
echo 3<=>2;// 1, 3 больше 2
Строгая типизация
Строгая типизация аргументов переданных в функцию, а также значений отдаваемых функцией.
function f1(int $a, int $b): int//Можно: int, float, string, bool, array
{
return $a*$b;//30
}
//echo f1(5,"A");//Выдаёт ошибку
echo f1(5, 6);//30
Анонимные классы
Анонимные классы в php 7 (классы без имени) полезны, когда нужно создать простые, одноразовые объекты.
$ob=new class
{
public function getName($name)
{
echo $name;
}
};
$ob->getName('Гена');//Гена
Анонимные классы могут передавать аргументы в конструкторы, расширять другие классы, реализовывать интерфейсы и использовать трейты как обычный класс.
Функции random_bytes() и random_int()
Функция random_bytes() возвращает строку и принимает в качестве входных параметров int, задающий длину (в байтах !!!) возвращаемого значения:
$bytes=random_bytes(10);
var_dump(bin2hex($bytes));//string(20) "960770f947965c34d02a"
Функция random_int() возвращает целое число в заданном диапазоне:
echo random_int(1,100);//55 - от 1 до 100
Поддержка юникода
echo "\u{1f602}"//Смайлик
Убрали теги <% код %>
В php 7 окончательно убрали теги <% код %>.