PHP Digest
8.5K subscribers
60 photos
3 videos
289 links
PHP Дайджест

Новости, материалы и инструменты из мира PHP — раз в месяц.

Вопросы, замечания, предложения: @pronskiy
Download Telegram
September 9, 2019
September 27, 2019
PHP-Дайджест № 165

PHP 7.4.0 RC3, поддержка Composer-зависимостей на GitHub, обновление стандартов PSR, RFC предложения из PHP Internals и о координации проекта PHP, порция полезных инструментов, подкасты, митапы, и многое другое!

https://habr.com/p/470373/
October 7, 2019
October 30, 2019
October 31, 2019
November 5, 2019
Чёрная магия PHP

https://github.com/lisachenko/z-engine

Как замокать финальный класс или переопределить финальный метод? Ну допустим, для этого есть badoo/soft-mocks. А как насчёт добавить интерфейс к существующему классу в рантайме? Или, например, изменять тип объекта.

Новая библиотека от Александра Лисаченко потенциально позволяет делать вообще всё что угодно.

В PHP 7.4 добавлена новая возможность – FFI, которая позволяет подгружать сишные модули (.dll or .so), и вызывать функции из них или использовать структуры данных из C на чистом PHP.
Библиотека Z-Engine использует FFI, чтобы получить доступ к внутренним структурам самого PHP! Z-Engine читает нативные структуры PHP, например, zend_class_entry, zval, и подобные и может изменять их в рантайме.

// Сделаем абстрактный класс обычным
$refClass = new ReflectionClass(TestClass::class);
$refClass->setAbstract(false);
assertFalse($refClass->isAbstract());
$instance = new TestClass();
assertInstanceOf(TestClass::class, $instance);

Осторожно! Библиотека предоставляет практически неограниченный доступ к памяти самого PHP и работает со структурами на низком уровне. Поэтому вполне возможны сегфолты, утечки памяти и другие неприятные последствия. Так что, только для тестов.
November 11, 2019
PHP-Дайджест № 168

PHP 7.4 RC6, Symfony 5.0 и 4.4, WordPress 5.3 и другие релизы, об обновлении PSR-стандартов, RFC предложения из PHP Internals, порция полезных инструментов, митапы, видеозаписи, подкасты и многое другое!

https://habr.com/p/477318/
November 25, 2019
November 28, 2019
Вышел PhpStorm 2019.3

https://habr.com/ru/company/JetBrains/blog/478030/

Вслед за релизом PHP 7.4, вчера выпустили третий мажорный релиз PhpStorm в этом году. Возможно вы уже даже успели обновиться и посмотреть, что нового. Но если нет, то всё самое важное можно глянуть в коротком видеоролике (англ):
https://www.youtube.com/watch?v=h9KGsD87t_M (поправил ссылку)

А подробный разбор прям всех изменений смотрите в хабрапосте.
November 29, 2019
PHP-Дайджест № 169

PHP 7.4, PhpStorm 2019.3, InfectionPHP и другие релизы, статистика версий PHP, об использовании FFI, видео с прошедших конференций и митапов, порция полезных инструментов, и многое другое.

https://habr.com/ru/post/479306/
December 9, 2019
Как выбрать файлы для предзагрузки в PHP 7.4

https://github.com/DarkGhostHunter/Preloader

Многие ожидали, что поддержку предзагрузки сделают прям в Composer. Но, судя по всему, в ближайшее время это не будет реализовано.
Для Symfony поддержку уже выкатили сами https://symfony.com/blog/new-in-symfony-4-4-preloading-symfony-applications-in-php-7-4
Для Laravel обещают, но из-за использования алиасов пока будут проблемы.

А как быть с произвольным приложением? Можно попробовать загрузить все файлы. Если не нарвётесь на segfault и ряд других нюансов (подробнее https://habr.com/ru/company/badoo/blog/472528/), то это сработает и должно дать прирост. Но эффективнее загружать не все классы, а только самые часто используемые. И вот вопрос как узнать какие это?

Появился вот такой инструмент:
https://github.com/DarkGhostHunter/Preloader

Он предлагает сначала собрать статистику по используемым классам из самого опкэша во время запусков приложения. А потом по этой статистике уже сгенерировать preloader.php скрипт, который подгрузит нужные классы в опкэш. Звучит как годная идея, надо пробовать.
December 11, 2019
Если этим субботним утром вы думаете что бы посмотреть, то вот трансляция митапа в Казани https://www.youtube.com/watch?v=zZTv7HMxKXI
В программе аж 6 докладов.

Кстати, в списке мероприятия на декабрь в последнем выпуске дайджеста не было митапа SymСode в Питере. Он пройдёт 18 декабря в офисе JetBrains https://www.meetup.com/ru-RU/symcode/events/267106695/
December 14, 2019
Пока делал видео об обновлении на PHP 7.4 с помощью PhpStorm, Никита обратил моё внимание на то, что сеттеры работают медленнее, чем присвоение свойствам напрямую. Пришлось сделать микробенчмарк. Не верить же Никите на слово?!
https://gist.github.com/pronskiy/492a0590d0fd3cfa0a02a2d7f908c494
Set typed public property:       1.408833026886s
Set via setter (no type check): 3.0818917751312s
Set private property via setter: 3.1216759681702s
Set private property via magic: 20.88130402565s

Если сеттер тривиальный, то с типизированными свойствами в нём мало смысла. Поэтому в видео есть руководство, как сделать квик-фикс для PhpStorm с помощью SSR, чтоб заменять сеттеры на лету там, где необходимо.

⚠️ Бежать и выкидывать сеттеры только из-за перфоманса смысла не имеет в 99% случаев.
December 20, 2019
PHP-Дайджест № 172

PHP 7.4.2 и другие релизы, Stringable RFC, обзор PHP 8, порция полезных инструментов, 4 ближайших митапа, видеозаписи с конференций, стримы и многое другое!

https://habr.com/p/485592/
January 27, 2020