Свежая подборка со ссылками на новости и материалы. В выпуске: взломан репозиторий 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 для исправления ошибок стиля, и много других улучшений.
- Onliner PHP Meetup #3 — Минск, 9 февраля.
- 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
- Видеозаписи SymfonyCon 2018 — Среди которых доклад Фабьена о локальном дев сервере.
- Неделя Symfony #629 (14-20 января 2019)
- Неделя Symfony #630 (21-27 января 2019)
Laravel
- beyondcode/laravel-mailbox — Пакет для обработки входящих email.
- spatie/laravel-eventsauce — Event sourcing для Laravel-приложений на базе EventSauce.
- vanilophp/framework — E-com фреймворк для Laravel.
- Подкаст от Тейлора Laravel Snippet #2
Async PHP
- dantleech/fink — Инструмент для проверки сайта на битые ссылки. Реализован с использованием amphp/artax.
- reactphp/child-process v0.6.0 — Событийная библиотека для работы с дочерними процессами с помощью ReactPHP. Теперь с поддержкой Windows. Подробнее в посте.
CMS
- magento/magento-coding-standard — Стандарт кодирования Magento в виде правил для PHP_CodeSniffer.
- Рекомендации по использованию Drupal без фронтенда (decoupled) в 2019
Материалы для обучения
- Советы по ускорению подсчета покрытия кода. Также имеется экспериментальное расширение krakjoe/pcov, которое позволяет подсчитать покрытие быстрее, чем phpdbg.
- Почему важно полировать код до мелочей
- Интересный пост об использовании препроцессора preprocess.io для реализации веб-приложения с коммуникацией по WebSocket.
- Мое современное рабочее окружение для PHP
- Классический пост о том, когда объявлять классы финальными и свежее дополнение к нему.
- Создание сторис для Instagram из PHP
- Работа начинается с тестирования
- Сравниваем PHP FPM, PHP PPM, Nginx Unit, React PHP и RoadRunner
Занимательное
- Code Galaxies — Забавная 3D визуализация взаимосвязей между Composer-пакетами.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 147
Комментарии (25)
rjhdby
28.01.2019 10:08+1[RFC] Code free constructor
Резиденты internals настроены скептически, а жаль.SerafimArts
28.01.2019 10:38Репозиторий PEAR был взломан — Сайт pear.php.net ушел в офлайн и не работает до сих пор.
Хм, а кто-нибудь этим PEAR вообще пользуется? По-моему он уже давным-давно и так помер.
rjhdby
28.01.2019 10:46Там есть полезные расширения. Например для работы с редкими/экзотическими базами данных.
SerafimArts
28.01.2019 10:49+2Эм, а вы на счёт расширений с PECL не перепутали? PEAR — это как композер, только неюзабельный, древний, и как оказалось — дырявый =)
P.S. Ой, случайно в вашей ветке ответил, не заметил. То что выше в 10:38 — это не комментарий к вашему, а к посту самому коммент.
molchanoviv
28.01.2019 11:36+1Этот RFC как минимум не доработан. Там в качестве проблемы указана перезапись родительской переменной, но ведь это давно решено например в Kotlin если используется модификатор доступа, то это поле класса, а если нет, то локальный параметр используемый только в конструкторе. Такая-же история и с анонимными классами. Отсюда и скепсис. Никто не хочет внедрять полурабочую фичу.
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 С другой стороны, дискуссия про изничтожения бойлерплейта в конструкторе в принципе завязалась, что хорошо :)
berezuev
28.01.2019 10:44+2xobotyi/php-mime-type — Библиотека позволяет определить MIME-тип по расширению.
Не нужно так делать. С такой проверкой можно любой бинарник обозвать *.jpeg и свободно загружать на хостинг. А ведь все уже давно изобретено.xobotyi
29.01.2019 00:18Никто не предлагает определять майм-тип по расширению, первоцель обратная — узнать известные расширения по майму.
UPD: перечитал какое описание поставли… вводит в заблуждение…
NickyX3
29.01.2019 08:50Я вас расстрою, указанная mime_content_type делает тоже самое, юзает mime.magic файлик, никакие сигнатуры не тестятся.
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>
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, но разве это не первичная задача для технической документации?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 А вообще странно, что его в статью включили, так как это черновик на этапе самого первичного обсуждения и понятно, что вопросов еще много. А тут сразу критиков понабежало и ну давай автора расстраивать :Dpronskiy Автор
29.01.2019 12:06+1Интересные черновики всегда включаю. А критика это ж хорошо – быстрый фидбек от реальных пользователей PHP и возможность подправить RFC.
А вы не проводили анализ GitHub/Packagist на предмет того, насколько часто такой бойлерплейт код используется?rjhdby
29.01.2019 12:34А вы не проводили анализ GitHub/Packagist на предмет того, насколько часто такой бойлерплейт код используется?
Нет, оценивал субъективно и, честно говоря, большей частью не по PHP-коду, а по JVM-языкам. Исторически сложилось, что там гораздо чаще смотришь чужой код.
Откровенно говоря, одним из скрытых побудительным мотивов было желание подтолкнуть разработчиков к этой практике. Эдакая завлекалочка — «теперь ты можешь сделать код лучше, написав меньше». :)
Понятно, что про «лучше» в этом контексте — это только одна из точек зрения. Многие согласятся, многие нет. Вот для тех, кто согласится, жизнь станет легче.
NickyX3
29.01.2019 08:51leocavalcante/siler — Микрофреймворк реaлизован на простых функциях без использования классов. Можно использовать со Swoole
Забавная штука, очень забавная, прямо заинтригован
Compolomus
29.01.2019 11:56-1Хорошие новости. Ожиотаж вокруг php все же есть. Плохо конечно что команда дробится, но то что будет финансирование уже хорошо
affka
yii теперь только в тегах… (
marad3r
Все к этому шло, к сожалению. А может быть и к счастью, все больше людей будет обращать внимание на лидеров рынка.
xRay
Все новости тут github.com/yiisoft/yii-core/commits/master github.com/yiisoft/yii-core/milestones
Как раньше написал SamDark
Информация о структуре пакетов в yii3 github.com/yiisoft/docs/blob/master/000-packages.md#yii-framework