PHP 7.4+


7.4+

== Объявление типов в свойствах класса ==

class User {
    public int $id;
    public string $name;
}


== Стрелочные функции ==

Привязка к родительской области видимости

$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);


== Привязывающий оператор ?? ==

$array['key'] ??= computeDefault();

// примерно то же самое
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}



== Распаковка внутри массивов ==

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];



== Новые магические методы сериализации ==

// Возвращает массив, содержащий все необходимое состояние объекта.
public function __serialize(): array;

// Восстанавливает состояние объекта из указанного массива данных.
public function __unserialize(array $data): void;



== Расширения proc_open ==

Вызов процесса по массиву с авто-экранированием

proc_open(['php', '-r', 'echo "Привет, мирn";'], $descriptors, $pipes);


Вызов процесса с редиректом

// То же самое, что и 2>&1 в командной оболочке
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

// То же самое, что и 2>/dev/null или 2>nul в командной оболочке
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);