Подборка свежих новостей и материалов из мира PHP.
В выпуске: вышел PHP 8.1, создана организация PHP Foundation с целью развития и поддержки PHP, критическая уязвимость в doctrine/dbal, в PHP 8.2 будут объявлены устаревшими динамические свойства, вышли Symfony 6 и Symfony 5.4.
Также в выпуске полезные статьи, видео и другие новости сообщества.

Приятного чтения!

Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.

Новости


  • Вышел PHP 8.1


    Основные новые возможности:
    • Enums они же перечисления;
    • Readonly свойства;
    • First-class callable — получение ссылки на любую функцию;
    • Оператор new в инициализаторах (и вложенные атрибуты);
    • Файберы;
    • final константы в классах;
    • Новый тип never для (не)возвращаемых значений;
    • Запись восьмеричных чисел с префиксом 0o;
    • Оператор ... поддерживает массивы со строковыми ключами;


    В релизе Дмитрий Стогов и другие контрибьюторы сделали много улучшений по производительности.
    На Symfony и Laravel прирост будет существенный (+23% к скорости на демо приложении Symfony).
    На других приложениях, скорее всего, будет не так заметно. Например, на WordPress прирост будет до +3.5%

    В релизе также много депрекейшнов, улучшений консистентности и обработки ошибок.

    Основные депрекейшны:
    • Объявлено устаревшим неявное преобразование float в int, где теряется дробная часть;
    • Для Serializable необходимо использовать __serialize()/__unserialize();
    • Ограничено использование $GLOBALS;
    • Объявлено устаревшим передача значения null в параметры встроенных функций, которые не nullable;
    • Добавлены типы для возвращаемых значений встроенных классов (и новый атрибут #[ReturnTypeWillChange]);
    • Продолжено удаление типа resource. Ресурсы file_info, imap FTP Connection, LDAP, PostgreSQL теперь будут объектами, соответственно finfo, IMAP\Connection, FTP\Connection, PgSql\Connection, PgSql\Result.

    Еще почитать-посмотреть:

    Важно:
    Активная поддержка PHP 7.4 уже закончена, то есть будут только секьюрити фиксы в течение года.
    А поддержка PHP 7.3 будет полностью прекращена 6 декабря.
    Обновляйтесь!

  • The New Life of PHP – The PHP Foundation


    JetBrains совместно с компаниями Automattic (WordPress), Acquia (Drupal), Laravel, Private Packagist (Composer), Symfony, Zend, Craft CMS, Tideways и PrestaShop учредили некоммерческую организацию PHP Foundation, миссия которой — обеспечить долгосрочное развитие языка PHP.

    Одной из причин создания организации стало изменение интересов Никиты Попова. Уже 10 лет он занимался PHP и последние 3 года работу Никиты над PHP оплачивала компания JetBrains. Кроме PHP, Никита долгое время контрибьютил в LLVM и Rust. И вот теперь решил сосредоточить свою профессиональную деятельность на LLVM и с 1 декабря Никита перейдёт на работу в другую компанию. Никита все еще будет частью PHP-сообщества, но контрибьютить будет значительно меньше.

    Первичная задача фонда — трудоустроить разработчиков в режиме полного или частичного рабочего дня, которые будут заниматься ядром интерпретатора PHP в репозитории php/php-src.

    Подробно об истории создания и работе фонда я рассказал на стриме: videoПро PHP Foundation с Романом Пронским.

    Еще про фонд и историю влияния на PHP можно прочитать в посте от Joe Watkins (сделал большой вклад в создание фонда).

    Поддержать фонд донатом можно по ссылке:
    opencollective.com/phpfoundation

    Обновления о работе будем публиковать в твиттере: @ThePHPF.

  • Composer станет еще быстрее


    В ближайшем релизе будет по умолчанию включен Pool Optimizer — это заметно ускорит операции установки обновления, причем чем сложнее набор зависимостей в composer.json, тем существеннее будет прирост скорости и меньше потребление памяти.

  • [RFC] Deprecate dynamic properties


    Несмотря на многочисленные споры, предложение принято с перевесом всего в два голоса 52:25!

    Это значит, что в PHP 8.2 динамические (необъявленные) свойства будут объявлены устаревшими, а в PHP 9.0 они будут вовсе удалены. Подробнее в PHP Дайджесте № 215.

    В тему свежая статья от Larry Garfield про споры об эволюции PHP.

  • Вышла Doctrine DBAL 3.2.0


    Также обнаружена критическая SQL-инъекция в doctrine/dbal 3.0.0 — 3.1.3, стоит немедленно обновиться до 3.1.4 или новее.

  • [RFC] Readonly classes


    Máté Kocsis предлагает для PHP 8.2 readonly классы. По сути, это просто класс в котором все свойства readonly и запрещены динамические свойства. То есть это небольшой синтаксический сахар для удобства.

    readonly class Foo {
        public string $prop;
    }
    

    Эквивалентно:
    class Foo {
        public readonly string $prop;
        public function __set($name, $value) {
            throw new Error('Cannot create dynamic property');
        }
    }
    



Инструменты


  • clue/framework-x — Реактивный микро-фреймворк от создателей ReactPHP.
  • marcosh/lamphpda — Набор иммутабельных структур для функционального программирования.
  • web3-php/web3 — Клиент для работы с Ethereum RPC.
  • SergiX44/Nutgram — Фреймворк для ботов Telegram с простым API.
  • CuyZ/Valinor — Маппер данных в строго-типизированные объекты.


Symfony




Laravel




Yii




Статьи




Аудио/Видео




community Сообщество





Подписывайтесь на Telegram-канал PHP Digest.

Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.


Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест №215

Комментарии (11)


  1. iRedds
    01.12.2021 06:29

    Интересно, кто победит. readonly class VS #[AllowDynamicProperties]


  1. QeqReh
    01.12.2021 06:48
    +6

    Скажу не популярную вещь, но PHP становится интерпретируемой явой, с наследием в виде кривого синтаксиса и динамической типизацией. Порог вхождения при этом увеличивается, код становится менее предсказуемым.

    Старые проблемы при этом остаются, например наследие стандартных функций с их анархией в параметрах и работой через poiner, почему бы не сделать обертку как в DateTime?

    С такими темпами лучше мигрировать на яву.

    Недавно попробовал кодить на ней и поймал себя на мысли, что код там получается предсказуемым и понятней, хоть и многословным.

    Низкий порог вхождения был когда-то основной фишкой PHP. Сейчас чтоб начать писать приложения нужно знать целый кластер технологий.

    Можно попробовать поучиться по старинке, но столкнешься с проблемами когда начнешь работать с продуктовым кодом.

    P.S. Пишу на PHP со временен 4-й версии (начинал с того что в школьные времена писал плагины для xoops, кстати он ещё живой).


    1. HellWalk
      01.12.2021 11:08
      -3

      Низкий порог вхождения был когда-то основной фишкой PHP. Сейчас чтоб начать писать приложения нужно знать целый кластер технологий.

      Зато зарплаты ниже всех))

      Ну и самое забавное, что в каждой второй статье про «войти в IT» рекомендуют PHP для входа.


    1. pronskiy Автор
      01.12.2021 11:27
      +5

      Даа, в наше время трава была зеленее.

      Это "непопулярное мнение" звучит приблизительно со времен PHP 5.0, вам ли не знать.


    1. maximw
      01.12.2021 12:51
      +1

      Ну в принципе про PHP все верно, кроме

      код становится менее предсказуемым.


    1. Fockker
      01.12.2021 14:03
      +9

      Писание писанию рознь.

      Можно 20 лет натягивать верстку на вордпресс, и в этом случае да - такие вздохи вполне оправданы.

      Но я вот ещё даже на 3 версии успел прилично поработать, сессии были не частью языка, а работали через отдельную phplib. И для тех задач, с которыми приходится сталкиваться, я только приветствую все изменения. Которых, в сущности, не так много - опциональный к применению контроль типов, улучшение поддержки ООП и немного синтаксического сахара.

      При этом вполне можно продолжать говнокодить и по-старинке. "Продуктовый код" о котором вы говорите - это ООП. И претензию здесь надо предъявлять не РНР, а тем людям, которые смеют на нём писать, а потом новичку приходится его учить. Ну а если никак не получается без процедур и глобальных переменных, то специалисты по вордпрессу вполне ещё востребованы.


    1. Blumfontein
      08.12.2021 06:59

      интерпретируемой явой ... и динамической типизацией

      А чем это плохо? Статическая типизация, это конечно, хорошо, но вот без компилируемости это все "деньги на ветер" по-моему. А компилируемый язык в вебе, оно надо?


  1. des1roer
    01.12.2021 10:30

    Начиная с PHP 8.1.0, класс, который реализует Serializable без реализации __serialize() и __unserialize() выдаст предупреждение об устаревании. - не пугайте людей


    1. pronskiy Автор
      01.12.2021 11:36

      Выдаст предупреждение именно потому, что он объявлен устаревшим. __serialize() и __unserialize() можно использовать и без интерфейса Serializable.

      Но согласен с вами, что формулировка была не очень. Поправил, спасибо!


  1. normal
    01.12.2021 11:13
    +2

    Спасибо!


  1. Steepik
    01.12.2021 14:03
    +2

    енамчики :)