PHP раньше был простым и на нем можно было писать как угодно, что приводило к говнокоду и низкой защищённости от сбоев. Но последнее время PHP начал развиваться очень быстро и в лучшую сторону, хотя все также предоставляет нам гибкость писать говнокод, но уже имеет инструменты писать код лучше.
Новая версия PHP 8.1 – это следующий шаг сделать язык лучше. Пусть и небольшой, но все же шаг. Рассмотрим новинки:
Enum – наконец в PHP появились enum. Я не знаю, почему разработчики так долго ждали, ведь это не самая сложная конструкция. Теперь мы сможем писать:
enum Status { case Draft; case Published; case Archived; }
Свойства только для чтения – если перед свойством поставить readonly, то значение для такого свойства можно будет установить только один раз и при попытке изменить его произойдёт ошибка. Пример enum свойства да ещё и только для чтения:
class MyClass { public readonly Status $status; public function __construct(Status $status) { $this->status = $status; } }
Волокна Fiber – это не потоки, но достаточно интересный низкоуровневый компонент, который обладает своим стеком переменных и состояний. Это не потоки, хотя название Волокна может указывать на это и сами по себе волокна не дают возможности выполнять два блока кода, но фреймворки смогут использовать эту функцию для асинхронности.
Инициализация во время инициализации – теперь можно использовать оператор new во время инициализации:
public function __construct( Logger $logger = new Logger()) { $this->logger = $logger; }
Возвращаемый и тип never – это новый тип, который подчеркивает, что метод никогда не вернёт никакого значения. Это очень удобно будет использовать в Web, когда нужно сделать переадресацию на другую страницу и тут же завершить работу программы, то есть не возвращать никаких значений:
function redirect(string $uri): never { header('Location: ' . $uri); exit(); }
Используйте never, когда функция ничего и никогда не вернёт, потому что внутри будет генерироваться исключительная ситуация или будет происходить прорывание работы кода с помощью return или die.
Окончательные константы – такие значения не могут быть переопределены в классах потомках:
class Foo { final public const XX = "foo"; }
Ну и помимо этого версия 8.1 работает быстрее, потому что разработчики улучшили PHP без ухудшения, а наоборот улучшения производительности.
Это не все новинки, новых возможностей чуть больше, но я решил рассказать про эти, как самые интересные на мой взгляд.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 1 человек
Перечисления - прикольная штука. Хотя я понимаю, что в значительной части случаев я буду использовать их там, где до этого использовал ассоциативные массивы. Круто.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.