10/12/2021
25 ноября 2021 года объявили о релизе новой версии PHP - 8.1
⠀
В данном релизе было исправлено множество найденных багов, а также добавлено немало улучшений.
⠀
Перечислим изменения, которые нам показались наиболее интересными (обо всех нововведениях и изменениях вы можете узнать на сайте https://php.net):
⠀
🔹 Перечисления (Enum). Теперь их можно использовать вместо набора констант.
🔹 Произвели много улучшений производительности. В Symfony и Laravel прирост производительности будет до +23% (на демо-приложении Symfony), на других приложениях, скорее всего, прирост будет меньше.
🔹 Добавили возможность распаковывать массивы со строковыми ключами.
🔹 Ввели новый тип never. Использовать его можно для указания того, что функция будет останавливать поток выполнения программы.
🔹 Новая функция array_is_list для определения того, является ли массив списком.
🔹 final для констант классов.
🔹 Добавили возможность указать префиксы для обозначения восьмеричных чисел.
🔹 Теперь при определении значений параметров по-умолчанию для применения объектов разрешено использовать ключевое слово new.
🔹 Появилась возможность помечать свойства классов как readonly.
🔹 Добавили новый синтаксис для вызываемых объектов (callable).
🔹 Полноценная поддержка пересечения типов, чтобы создавать новые типы, значения которых должны подпадать одновременно под несколько типов. Пересечения требуют наличия в множестве всех указанных типов.
🔹 Файберы (еще их можно назвать корутинами). Зачатки асинхронности. С ними теперь можно управлять потоками на низком уровне. Файберы позволяют определить блоки кода, выполнение которых может быть приостановлено и возобновлено по аналогии с генераторами, но из любой позиции стека. Поддержку файберов добавят в Amphp и ReactPHP.
🔹 Добавили функции fsync и fdatasync для принудительного сохранения изменений из дискового кеша.
🔹 Добавили поддержку алгоритмов хэширования MurmurHash3 и xxHash.
⠀
В релизе также много deprecation's, улучшений консистентности и обработки ошибок:
🔸 Объявлено устаревшим неявное преобразование float в int, где теряется дробная часть.
🔸 Ограничено использование $GLOBALS.
🔸 Отказались от передачи значений null в качестве аргументов внутренних функций помеченных как non-nullable.
🔸 Отказались от программного интерфейса Serializable.
🔸 Продолжено удаление типа resource.
⠀