Свежая подборка со ссылками на новости и материалы. В выпуске: взломан репозиторий PEAR, о будущем Xdebug, конференция PHP Russia 2019, свежие релизы, RFC предложения из PHP Internals, порция полезных инструментов, и многое другое.

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



Новости и релизы


  • Репозиторий PEAR был взломан — Сайт pear.php.net ушел в офлайн и не работает до сих пор. Известно, что в файл go-pear.phar был внедрен вредоносный код. Вы под угрозой, если вручную скачивали этот файл после 20.12.2018. Чтобы проверить надо скачать «чистый» файл с GitHub и сравнить контрольные суммы. Для автоматизации имеется скрипт. Если вы использовали ОС с предустановленным PHP или устанавливали с помощью пакетного менеджера, то крайне маловероятно, что вы когда-либо использовали go-pear.phar. Пока сайт не работает есть обходные пути для установки PEAR-пакетов и сборки PHP из исходников.
  • Будущее Xdebug — Автор Xdebug Derick Rethans рассказал о техническом долге и проблемах расширения. Он уходит из MongoDB, где проработал последние 7 лет. В ближайшее время намерен заняться рефакторингом и доработкой Хdebug, а также ищет пути финансирования. Поддержать Дерика можно на его Patreon.
  • Кто оплачивает разработку PHP? — В конце поста говорится о том, что организация igphp.de совместно с некоторыми ключевыми членами команды PHP планируют решение проблемы финансирования и поддержки PHP, и в скором времени анонсируют его.
  • Компания Perforce поглотит Rogue Wave Software
  • PhpStorm 2019.1 EAP — Стартовала программа раннего доступа PhpStorm, благодаря которой можно первым пощупать новые возможности IDE совершенно бесплатно. Среди нововведений: отладка шаблонов Twig, возможность сортировки импортов (use выражений), поддержка phpcbf для исправления ошибок стиля, и много других улучшений.
  • ru Onliner PHP Meetup #3 — Минск, 9 февраля.
  • ru PHP Russia 2019 — 17 мая в Москве состоится специализированная PHP-конференция!
    О том, как появилась идея и о команде можно прочитать в посте Александра Макарова. Полным ходом принимаются заявки на доклады. А также в Telegram доступны официальный канал @PHPRussiaConfChannel и чат @PHPRussiaConfTalks с обсуждениями.

PHP Internals


  • [RFC] Null Coalescing Assignment Operator — Предложение было принято больше двух лет назад. И вот реализация комбинированного оператора с проверкой на null ??= наконец-то закончена и смержена. Несмотря на кажущуюся простоту задачи, имплементация оказалась весьма нетривиальной.
    Итого: $a ??= $b эквивалентно $a ?? ($a = $b). В случае $a[foo()] ??= bar() функция foo() будет вызвана ровно один раз, а bar() будет вызвана, если $a[foo()] равно null (или не установлено).
    В тему хороший пост о других коротких операторах в PHP.
  • [RFC] New custom object serialization mechanism — Свежий RFC от Никиты Попова. Предлагается ввести новый механизм сериализации объектов, добавив пару магических методов:

    // Returns array containing all the necessary state of the object.
    public function __serialize(): array;
     
    // Restores the object state from the given data array.
    public function __unserialize(array $data): void;
    

    Данное изменение призвано исправить проблемы интерфейса Serialiazable. К сожалению, исправить сам интерфейс невозможно, но в случае принятия предложения будет рабочая альтернатива.
  • [RFC] Code free constructor — Предлагается добавить автоматический конструктор, задача которого инициализировать свойства:
    Скрытый текст
    class MotorCycle {
        public $vendor;
        public $cc;
        public $whells = 2;
     
        public function __construct($vendor, $cc) {
            $this->vendor = $vendor;
            $this->cc     = $cc;
        }
     
        //other methods
    }
     
    class MyCustomMotorCycle extends MotorCycle {
        public function __construct($cc, $whells) {
            parent::__construct("Custom", $cc);
         // $this->cc = $cc;  this statement will be added within proposed realisation
            $this->whells = $whells;
        }
    }
    

    для кода выше предлагается следующий альтернативный синтаксис:
    class MotorCycle($vendor, $cc){
        public $whells = 2;
     
        //other methods
    };
     
    class MyCustomMotorCycle($cc, $whells) extends MotorCycle("Custom", $cc){ };
    


Инструменты


  • API Platform — Фреймворк на базе компонентов Symfony для создания API. В новой версии поддержка MongoDB, Elasticsearch, OpenAPI v3 и много другого.
  • xobotyi/php-mime-type — Библиотека позволяет определить известные расширения по MIME-типу и наоборот. Прислал xobotyi.
  • PHPStan 0.11 — Статический анализатор для PHP. Анонс релиза. Вдогонку видео о внутренностях PHPStan от одного из мейнтенеров.
  • Symplify/Statie — Простой генератор статических сайтов на PHP. Быстрый старт.
  • leocavalcante/siler — Микрофреймворк реaлизован на простых функциях без использования классов. Можно использовать со Swoole
  • directus/directus — Headless CMS c API.
  • mgp25/Instagram-API — Библиотека дает возможность использовать скрытые в официальном API возможности Instagram.
  • bmitch/churn-php — Инструмент поможет найти кандидатов на рефакторинг – файлы, которые больше всего изменялись в истории Git и имеют наибольшей цикломатической сложностью.

Symfony



Laravel



Async PHP


  • dantleech/fink — Инструмент для проверки сайта на битые ссылки. Реализован с использованием amphp/artax.
  • reactphp/child-process v0.6.0 — Событийная библиотека для работы с дочерними процессами с помощью ReactPHP. Теперь с поддержкой Windows. Подробнее в посте.

CMS



Материалы для обучения




Занимательное


  • Code Galaxies — Забавная 3D визуализация взаимосвязей между Composer-пакетами.

Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.

Больше новостей и комментариев в Telegram-канале PHP Digest.

Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 147

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


  1. affka
    28.01.2019 06:19

    yii теперь только в тегах… (


    1. marad3r
      28.01.2019 08:42
      +2

      Все к этому шло, к сожалению. А может быть и к счастью, все больше людей будет обращать внимание на лидеров рынка.


    1. xRay
      28.01.2019 12:59
      +1

      Все новости тут github.com/yiisoft/yii-core/commits/master github.com/yiisoft/yii-core/milestones

      Как раньше написал SamDark

      Жив. Основные части 3.0 уже можно даже запустить. Но пока там много работы, не хотим раздувать новостей из ничего…

      habr.com/ru/company/zfort/blog/426391/#comment_19238099

      Информация о структуре пакетов в yii3 github.com/yiisoft/docs/blob/master/000-packages.md#yii-framework


  1. UksusoFF
    28.01.2019 09:33
    +2

    Про EAP Шторма забыли? :) Обычно вроде пишете.


    1. pronskiy Автор
      28.01.2019 10:01

      Да :-) добавил, спасибо!


  1. rjhdby
    28.01.2019 10:08
    +1

    [RFC] Code free constructor

    Резиденты internals настроены скептически, а жаль.


    1. SerafimArts
      28.01.2019 10:38

      Репозиторий PEAR был взломан — Сайт pear.php.net ушел в офлайн и не работает до сих пор.

      Хм, а кто-нибудь этим PEAR вообще пользуется? По-моему он уже давным-давно и так помер.


      1. rjhdby
        28.01.2019 10:46

        Там есть полезные расширения. Например для работы с редкими/экзотическими базами данных.


        1. SerafimArts
          28.01.2019 10:49
          +2

          Эм, а вы на счёт расширений с PECL не перепутали? PEAR — это как композер, только неюзабельный, древний, и как оказалось — дырявый =)


          P.S. Ой, случайно в вашей ветке ответил, не заметил. То что выше в 10:38 — это не комментарий к вашему, а к посту самому коммент.


          1. rjhdby
            28.01.2019 10:53

            Посыпаю голову пеплом! Аббревиатуры — такие аббревиатуры.


    1. molchanoviv
      28.01.2019 11:36
      +1

      Этот RFC как минимум не доработан. Там в качестве проблемы указана перезапись родительской переменной, но ведь это давно решено например в Kotlin если используется модификатор доступа, то это поле класса, а если нет, то локальный параметр используемый только в конструкторе. Такая-же история и с анонимными классами. Отсюда и скепсис. Никто не хочет внедрять полурабочую фичу.


      1. rjhdby
        28.01.2019 12:07

        Не совсем так. Что Никите Попову, что Себастьяну Бергману не нравится именно предложенный синтаксис.

        > I think that *if* we want to add some kind of sugar of this type, then I'd
        > strongly prefer the syntax used by Hack than the one proposed here.
        Agreed.

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

        PS С другой стороны, дискуссия про изничтожения бойлерплейта в конструкторе в принципе завязалась, что хорошо :)


  1. berezuev
    28.01.2019 10:44
    +2

    xobotyi/php-mime-type — Библиотека позволяет определить MIME-тип по расширению.
    Не нужно так делать. С такой проверкой можно любой бинарник обозвать *.jpeg и свободно загружать на хостинг. А ведь все уже давно изобретено.


    1. gro
      28.01.2019 15:25
      -1

      А зачем давать возможность запускать jpeg?


    1. xobotyi
      29.01.2019 00:18

      Никто не предлагает определять майм-тип по расширению, первоцель обратная — узнать известные расширения по майму.
      UPD: перечитал какое описание поставли… вводит в заблуждение…


    1. NickyX3
      29.01.2019 08:50

      Я вас расстрою, указанная mime_content_type делает тоже самое, юзает mime.magic файлик, никакие сигнатуры не тестятся.



  1. rjhdby
    28.01.2019 13:00
    +4

    Кстати, немного интриг, скандалов и расследований(с) вам в статью. :)
    Коммит от 24 января сего года проскочили такие изменения:

    -   | Authors: Andi Gutmans <andi@php.net>                                 |
    -   |          Zeev Suraski <zeev@php.net>      
    +   | Authors: Andi Gutmans <andi@zend.com>                                |
    +   |          Zeev Suraski <zeev@zend.com>  
    


  1. tendium
    28.01.2019 16:54
    +3

    Не знаю, как вас, а меня сильно смущает магия в PHP RFC: Code free constructor, связанная с именованием аргументов конструктора (автор, кстати, сам подметил одну из проблем: Child constructor will silently rewrite parent's properties with same name). Это, имхо, прямой путь к неочевидным и трудно находимым багам. Да и вообще сам RFC выглядит каким-то недоработанным. В частности, не раскрыта тема (или я слепой) на счет областей видимости полей объекта. Не раскрыта и тема о поведении парсера/компилятора в случае приватных полей, имеющихся как у родителя, так и потомка. А что на счет отсутствия поля у объекта? Оно будет неявно объявлено как public? Или?

    P.S. Ясно, что всё это можно теоретически вычитать из PR, но разве это не первичная задача для технической документации?


    1. rjhdby
      28.01.2019 21:03

      Ясно, что всё это можно теоретически вычитать из PR, но разве это не первичная задача для технической документации?
      Ну, вообще-то, на странице с предложением есть ответы на большинство ваших вопросов.
      By the way, current realization simply add “_ _construct” method into class via AST injection. Another words, code “($cc, $whells)” considered as zend_ast node “parameter_list” and accordingly processed by standart way. You can declare property type like you declare them inside standard method. Also you can declare defaults for parameters, use “…” notation (there is a nuance) and do everything else.
      Тонкости реализации и поведения в граничных случаях — это в любом случае тема для дискуссии, а не для драфта, призванного продемонстрировать идею и синтаксис.

      PS А вообще странно, что его в статью включили, так как это черновик на этапе самого первичного обсуждения и понятно, что вопросов еще много. А тут сразу критиков понабежало и ну давай автора расстраивать :D


      1. pronskiy Автор
        29.01.2019 12:06
        +1

        Интересные черновики всегда включаю. А критика это ж хорошо – быстрый фидбек от реальных пользователей PHP и возможность подправить RFC.
        А вы не проводили анализ GitHub/Packagist на предмет того, насколько часто такой бойлерплейт код используется?


        1. rjhdby
          29.01.2019 12:34

          А вы не проводили анализ GitHub/Packagist на предмет того, насколько часто такой бойлерплейт код используется?
          Нет, оценивал субъективно и, честно говоря, большей частью не по PHP-коду, а по JVM-языкам. Исторически сложилось, что там гораздо чаще смотришь чужой код.
          Откровенно говоря, одним из скрытых побудительным мотивов было желание подтолкнуть разработчиков к этой практике. Эдакая завлекалочка — «теперь ты можешь сделать код лучше, написав меньше». :)
          Понятно, что про «лучше» в этом контексте — это только одна из точек зрения. Многие согласятся, многие нет. Вот для тех, кто согласится, жизнь станет легче.


    1. rjhdby
      29.01.2019 15:19
      +1

      В частности, не раскрыта тема
      Постарался раскрыть


  1. NickyX3
    29.01.2019 08:51

    leocavalcante/siler — Микрофреймворк реaлизован на простых функциях без использования классов. Можно использовать со Swoole

    Забавная штука, очень забавная, прямо заинтригован


  1. Compolomus
    29.01.2019 11:56
    -1

    Хорошие новости. Ожиотаж вокруг php все же есть. Плохо конечно что команда дробится, но то что будет финансирование уже хорошо