ar
Feedback
PHP Digest

PHP Digest

الذهاب إلى القناة على Telegram

PHP Дайджест Новости, материалы и инструменты из мира PHP — раз в месяц. Вопросы, замечания, предложения: @pronskiy

إظهار المزيد
8 309
المشتركون
لا توجد بيانات24 ساعات
-117 أيام
+530 أيام
أرشيف المشاركات
Дженерики в PHP Последние пару недель Никита Попов работал над исследованием возможности реализации дженериков. Если коротко, то, по словам Никиты, есть несколько серьёзных трудностей и он в целом пока не уверен, что добавить полноценные дженерики в PHP это хорошая идея. Есть PR с прототипом реализации https://github.com/nikic/php-src/pull/3 и все проблемы и открытые вопросы подробно изложены вот тут https://github.com/PHPGenerics/php-generics-rfc/issues/45

PHP-Дайджест № 172 PHP 7.4.2 и другие релизы, Stringable RFC, обзор PHP 8, порция полезных инструментов, 4 ближайших митапа, видеозаписи с конференций, стримы и многое другое! https://habr.com/p/485592/

PHP-Дайджест № 171 4 свежих RFC из PHP Internals и интересные пул-реквесты в PHP 8, порция полезных инструментов, подкасты, стримы и многое другое! https://habr.com/p/483684/

PHP-Дайджест № 170 CakePHP 4, Codeception 4, Phalcon 4 и другие релизы, порция полезных инструментов, подкасты, видео с прошедших митапов, и многое другое! https://habr.com/p/481564/

Пока делал видео об обновлении на 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% случаев.

Если этим субботним утром вы думаете что бы посмотреть, то вот трансляция митапа в Казани https://www.youtube.com/watch?v=zZTv7HMxKXI В программе аж 6 докладов. Кстати, в списке мероприятия на декабрь в последнем выпуске дайджеста не было митапа SymСode в Питере. Он пройдёт 18 декабря в офисе JetBrains https://www.meetup.com/ru-RU/symcode/events/267106695/

Как выбрать файлы для предзагрузки в 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 скрипт, который подгрузит нужные классы в опкэш. Звучит как годная идея, надо пробовать.

PHP-Дайджест № 169 PHP 7.4, PhpStorm 2019.3, InfectionPHP и другие релизы, статистика версий PHP, об использовании FFI, видео с прошедших конференций и митапов, порция полезных инструментов, и многое другое. https://habr.com/ru/post/479306/

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

PHP 7.4 Вышла в свет новая версия интерпретатора PHP! https://www.php.net/releases/7_4_0.php Среди заметных изменений: • Типизированные свойства • Стрелочные функции • Предзагрузка • FFI • Распаковка в массивах • Разделитель для числовых литералов • Слабые ссылки • Возможность бросать исключения в __toString() Быстро посмотреть новые фичи можно в руководстве по миграции https://www.php.net/manual/en/migration74.new-features.php Полный список изменений: https://github.com/php/php-src/blob/php-7.4.0/UPGRADING

PHP-Дайджест № 168 PHP 7.4 RC6, Symfony 5.0 и 4.4, WordPress 5.3 и другие релизы, об обновлении PSR-стандартов, RFC предложения из PHP Internals, порция полезных инструментов, митапы, видеозаписи, подкасты и многое другое! https://habr.com/p/477318/

Чёрная магия 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 и работает со структурами на низком уровне. Поэтому вполне возможны сегфолты, утечки памяти и другие неприятные последствия. Так что, только для тестов.

C результатом 61 голосов против 5 предложение принято. В PHP 8.0 нас ждут объединённые типы.

[RFC] Weak maps https://wiki.php.net/rfc/weak_maps В PHP 7.4 была добавлена поддержка слабых ссылок через специальный класс W
[RFC] Weak maps https://wiki.php.net/rfc/weak_maps В PHP 7.4 была добавлена поддержка слабых ссылок через специальный класс WeakReference. Развивая идею дальше, для PHP 8 Никита предлагает добавить коллекцию WeakMap, которая, по сути, будет аналогом SplObjectStorage, то есть множество, в котором ключами выступают объекты. Изюминка в том, что если объект, который был ключом, перестаёт существовать (на него нет других ссылок), то он автоматически пропадает и из коллекции WeakMap.

PHP-Дайджест № 167 PHP 7.4.0 RC5, Xdebug 2.8, критическая уязвимость в PHP-FPM, новости из PHP Internals, порция полезных инструментов, подкасты, стримы и многое другое! https://habr.com/p/474380/

Помните язык Perl? Совсем недавно после долгих споров сообщество Perl приняло решение переименовать Perl 6 в Raku. Дело в том, что Perl 6 не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык, для которого так и не было подготовлено инструментария по миграции с Perl 5. В итоге под одним именем Perl существовало два параллельно развивающихся самостоятельных языка, не совместимых друг с другом и имеющих свои сообщества разработчиков. Всё это очень напоминает историю с P++, которая, к счастью, не получила продолжения, и пока оставила след лишь в виде стикеров и футболок. Понаблюдаем, как будет развиваться судьба Perl/Raku.

Свежие подкасты про PHP SDCast #109 с Антоном Титовым, автором RoadRunner и Cycle ORM. https://sdcast.ksdaemon.ru/2019/10/sdcast-109/ The Undercover Elephpant с Derick Rethans автором Xdebug о том как устроена сборка мусора в PHP. https://undercover-elephpant.com/episodes/what-is-garbage-collection-in-php-and-how-do-you-make-the-most-of-it-with-derick-rethans Laravel Snippet – подкаст Тейлора. В последних эпизодах он делится советами о том, как строить бизнес на опенсорсе. Если ещё не слушали, рекомендую. https://share.transistor.fm/s/bc9c3206 Пятиминутка PHP: DDD #7 — Парадигмы моделирования и многоуровневая архитектура – продолжение серии выпусков по знаменитой книге Эрика Эванса Domain-Drived Design. https://5minphp.ru/episode71/

PHP-Дайджест № 166 PHP 7.4 RC4 и другие релизы, новости из PHP Internals, порция полезных инструментов, стримы, видео с конференций, подкасты и многое другое! https://habr.com/p/472306/

PHP-Дайджест № 165 PHP 7.4.0 RC3, поддержка Composer-зависимостей на GitHub, обновление стандартов PSR, RFC предложения из PHP Internals и о координации проекта PHP, порция полезных инструментов, подкасты, митапы, и многое другое! https://habr.com/p/470373/

PhpStorm 2019.3 EAP https://blog.jetbrains.com/phpstorm/2019/09/phpstorm-2019-3-early-access-program-is-now-open/ Пока я в от
PhpStorm 2019.3 EAP https://blog.jetbrains.com/phpstorm/2019/09/phpstorm-2019-3-early-access-program-is-now-open/ Пока я в отпуске, и новостей в канале не густо, но скоро вернусь с интересными сюрпризами. А тем временем запустили программу раннего доступа для третьего мажорного релиза PhpStorm в этом году. В этот раз фокус на качестве и производительности. Поэтому вся команда IntelliJ Platform, на которой базируется PhpStorm и другие IDE от JetBrains, занимается фиксами багов, проблем юзабилити и перформанса. В релиз ноутах можно увидеть много исправленных старых проблем. Правда, это значит, что новых фич будет меньше. Из того, что можно пощупать уже сейчас: – Поддержка всех фич PHP 7.4 (помимо типизированных свойств), с инспекциями и квик-фиксами – Подсветка в PHPDoc – Выбор интерпретатора для run-конфигураций – Множество мелких улучшений для PHP Отзывы можно писать мне @prnsk, в твиттер phpstorm (мы его читаем и отвечаем), или в блоге PhpStorm. По традиции билды EAP можно использовать бесплатно.