PHP 8.0 что нового

29 мая, 2020

Прочитал только что про нововведения в php 8, медленно но верно старый добрый php превращается в какого-то монстра, за нововведениями которого, просто перестаешь успевать следить

Ты еще вроде как не успел переварить все нововведения 5.3, как выходит полностью переработанная 7-ка, с нововведениями, которую ты тоже не успел переварить, и выходят какие-то очередные велосипеды, уже на 8-ке, и в какой-то момент ты просто офигиваешь и как будто сдаешься

Во-первых, вводится новый тип данных mixed и такое понятие как union. Явное указание, что значение может быть любого типа данных из object|resource|array|string|float|int|bool|null или union (части этих типов, указанных вручную)

Когда параметр объявлен без типа, то его тип — это mixed. Если функция не объявляет возвращаемого значения, то это не mixed, а mixed|void. Таким образом, если функция гарантированно должна что-то возвращать, но тип результата не известен заранее, то стоит написать его как mixed

Т.е. можно же было без этого всего, просто указывать конкретный тип данных? Но зачем-то ввели новый тип данных, смешанный тип данных, который просто добавляет перечисление других типов данных. Спор на тему необходимости этого, можно почитать тут, в комментариях. Дискуссия ушла в обсуждение «синтаксического сахара» и «синтаксической соли» :-)

Во-вторых, конструкция switch/case меняется альтернативной match

// match
$message = match ($status_code) {
0,1 => null,
2 => 'status_code = 2',
3 => 'status_code = 3',
default => 'unknown status code',
};

В-третьих, добавляется псевдо-тип, void для обозначения того, что функция не возвращает ничего

// void pseudo type = function never return value
public function setDiscount(int|float $num) : void {
$this->discount = $num;
}

Вот это самое гениальное (на самом деле в python такое давно):

Теперь в конце последней переменной, в момент объявления переменных, можно поставить запятую. Я так понимаю раньше вываливалось в ошибку.

public function(
string $parameterA,
int $parameterB,
Foo $objectfoo,
) {
// …
}

Добавлено это и многое другое, подробнее можете почитать в статьях или на RFC

https://habr.com/ru/post/504356/
https://habr.com/ru/post/526220/
https://habr.com/ru/company/skyeng/blog/543794/
https://habr.com/ru/company/macloud/blog/554008/