PHP 8.1 новинки языка


1 1

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 человек


Комментарии

Денис Сепетов

16 Января 2022

Перечисления - прикольная штука. Хотя я понимаю, что в значительной части случаев я буду использовать их там, где до этого использовал ассоциативные массивы. Круто.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне