Прочитал только что про нововведения в 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/