Подборка свежих новостей и материалов из мира PHP.

В выпуске: PHP теперь использует GitHub для трекинга багов; вышел PhpStorm 2021.3; закончена поддержка PHP 7.3, а 7.4 — в режиме только секьюрити фиксов; для PHP 8.2 снова обсуждается перегрузка операторов — теперь с новым ключевым словом.

Также в выпуске полезные статьи, пачка инструментов, видео и другие новости сообщества.

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

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

⚡️ Новости


  • Баги PHP теперь на GitHub


    Предложение мигрировать баги с bugs.php.net на GitHub принято практически единогласно.
    Раздел php/php-src/issues уже открыт и можно видеть первые созданные баги.

  • Вышел PhpStorm 2021.3


    Мажорное обновление IDE с кучей улучшений. Из основного:
    • Полная поддержка PHP 8.1.
    • Улучшена поддержка дженериков (особенно для doctrine/collections и eloquent/collections из Laravel 9).
    • Рефакторинг перемещения классов и неймспейсов с помощью drag-and-drop.
    • Инструменты удаленной разработки.
    • Улучшения деплоймента и других подсистем.

    Проверки PhpStorm можно запускать в CI благодаря Qodana for PHP — это отдельный инструмент от JetBrains, который работает на движке PhpStorm. Можно использовать, например, для поиска проблем совместимости с PHP 8.0 / 8.1.

  • Закончена поддержка PHP 7.3


    Для PHP 7.4 активная поддержка тоже завершена, но еще в течение года будут выходить исправления проблем безопасности в случае их обнаружения.
    phpreleases.com — На этом ресурсе есть API для получения информации о поддерживаемых версиях PHP.

  • [RFC] User Defined Operator Overloads


    Снова на обсуждении предложение добавить перегрузку операторов в PHP. На этот раз довольно интересный хоть и спорный подход.

    Раньше предлагалось для каждого оператора определить магический метод, например, __add() для + или __mul() для *.

    В текущей редакции RFC предлагается ввести новое ключевое слово operator. Оно используется вместо function и по сути делает то же самое, но позволяет использовать символы операторов вместо имен функций.
    class Collection {
        // Ранее предлагалось вот так
        function __add(Collection $other, OperandPosition $operandPos) {}
    
        // А теперь вот так
        operator +(Collection $other, OperandPosition $operandPos) {}
    }
    

    Нужна ли в PHP перегрузка операторов? Есть ли применение в ваших приложениях?

  • 2022 PHP Landscape Report Survey


    Ежегодный опрос PHP-сообщества от Zend.
    Скоро будет запущен опрос русскоязычного сообщества от spasibo_kep и PHP-чатов/каналов, ну а пока можно заполнить опрос от Zend.

  • Начата работа над PSR стандартом для i18n


    Задачи интернационализации и локализации встречаются повсеместно и иметь общий стандарт было бы отлично.
    Пока сформирован мета-документ, в котором описаны цели и не-цели стандарта. А также собирается рабочая группа, в которую среди прочих вошел samdark.



???? Инструменты




Symfony




Laravel




Yii


  • yiisoft/di — DI-контейнер совместимый с PSR-11 от команды Yii.


???? Статьи




???? Аудио/Видео




???? Сообщество





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

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

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

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


  1. Jsty
    13.12.2021 20:29

    Пожалуйста, не надо перегрузки операторов.

    $object1 + $object2

    Ранее всегда было ясно, что в данном контексте в условно хорошем коде будут int/float.


    1. pxz
      13.12.2021 21:22
      +6

      Иногда нужно работать либо с большими числами, либо с числами с фиксированной точностью, либо с большой мантиссой. Для этого в PHP удобных нативных инструментов нет.

      Для организации Decimal существует экстеншн: https://github.com/php-decimal/ext-decimal. Как раз там как бы реализована перегрузка операторов на уровне экстеншна, то есть:

      $foo = new Decimal("0.1");
      $bar = new Decimal("0.2");
      
      $baz = $foo + $bar;
      echo $baz->toString(); // "0.3"

      Также небезвестное решение: https://github.com/brick/math. В этом случае используются методы вроде sum(...)

      Всё же, привычные арифметические операторы были бы удобны здесь. Но остаётся открытым вопрос сложения, например, нативного int с каким-то BigInteger.

      Хотелось бы остановиться на том, что результатом операций с привычными бинарными операторами будут числа в том или ином представлении (тот же BigInteger или Decimal). Дальше уже вопросы типизации.


      1. bolk
        14.12.2021 13:16

        Мне кажется тут давно нет вопросов:


    1. Mozhaiskiy
      14.12.2021 11:10
      +2

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

      Для меня ещё с PHP4 загадка, почему array_merge() не имеет синонима в виде обычного "+" это же собственно, сложение массивов в чистом виде.


      1. t_kanstantsin
        14.12.2021 11:36

        Для меня ещё с PHP4 загадка, почему array_merge() не имеет синонима в виде обычного "+"

        потому что обычный "+" уже делает свою работу https://www.php.net/manual/en/language.operators.array.php


        1. Mozhaiskiy
          14.12.2021 13:41

          Так ведь это union только для хэшей, где идёт проверка на уникальность ключа. А "обычные" массивы, где нет ключей, так не объединить. ['a', 'b'] + ['c', 'd'] в php будет ['a', 'b'] (т.к. индексы 0 и 1 уже заняты), а вовсе не ['a', 'b', 'c', 'd'], как можно было бы ожидать.

          Но речь не об этом. В случае своего объекта я бы хотел сам определить, что для него будет сложением, а не городить всякие ->addWith(...). В ряде случаев нужно поэлементное сложение, в другом ряде нужно объединение — это гибкость.

          Я понимаю, что "надёжность при командной разработке" требует убрать из языков и указатели, и перегрузки, и битовые операции. Но в итоге мы получили мир, в котором для запуска приложения-чата нужен 4-х ядерный комп с 8Гб ОЗУ :)


          1. t_kanstantsin
            14.12.2021 14:01

            Так ведь это union только для хэшей

            так я и пишу, что оператор "+" уже занят


    1. bolk
      14.12.2021 13:13
      +1

      Уже довольно давно это совсем не очевидно:

      Просто можно было делать только из расширений, а не из самого языка.


  1. casnerano
    14.12.2021 23:48
    +1

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

    Что касается варианта реализации:
    с одной стороны, хорошо бы придерживаться тех. же магических методов,
    но с другой стороны:
    1. будут сложности с неймингом операторов.
    2. кол-во маг. методов будет сильно возрастет.

    мне кажется, вариант с operator лучше.


  1. MARDEN
    15.12.2021 12:07

    Shardj/zf1-future — Ребятки поддерживают форк ZendFramework 1 совместимый с PHP 8.

    Никак не закопают стюардессу :)


  1. SamDark
    15.12.2021 19:30
    +1

    Macroable из фреймворка Laravel — совершенно ужасная фича, убивающая статанализ и рефакторинг.