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

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

Вопросы, замечания, предложения: @pronskiy
Download Telegram
PHP-Дайджест № 162
(1 – 12 августа 2019)

https://habr.com/p/463279/

О будущем PHP: P++ или PHP2020, принят PSR-12, PHP 7.4 beta 2, Slim 4, и другие релизы, порция полезных инструментов, и многое другое!
Сегодня в эфире сразу два подкаста

Во-первых, это выпуск Пятиминутки PHP по следам PHP-Дайджеста, в котором я подробнее рассказываю о том, что происходило в PHP Internals за последнее время и о радикальном предложении переписать PHP без оглядки на обратную совместимость, под кодовым названием P++.

https://soundcloud.com/5minphp/episode61

А во-вторых, это совместный выпуск SDCast + Пятиминутка PHP, где Костя Буркалев и Пётр Мязин общаются с разработчиками из команды PhpStorm Кириллом Смеловым и Максимом Колмаковым и обсуждают, как устроена разработка, команда, что есть нового!

https://sdcast.ksdaemon.ru/2019/08/sdcast-107/
PHP-Дайджест № 163
(12 – 26 августа 2019)

https://habr.com/p/464971/

PHP 7.4.0 beta 4, о судьбе P++, видео, подкасты, анонсы митапов и конференций, порция полезных инструментов, и многое другое!
В PHP 8 по умолчанию уровень ошибок будет установлен в E_ALL
вместо текущего:
E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED.

https://twitter.com/nikita_ppv/status/1168492040046415878
https://github.com/php/php-src/pull/4659/files
Union Types v2

https://github.com/nikic/php-rfcs/blob/union-types/rfcs/0000-union-types-v2.md

Никита Попов разразился ещё одним монументальным RFC.
Предлагается ввести объединённые типы – это значит, что переменная может принимать один из перечисленных типов. Де-факто объединённые типы давно используются в PHPDoc, но теперь они действительно будут проверяться самим интерпретатором.

Предлагаемый синтаксис T1|T2|... может быть использованы везде, где типы можно указывать сейчас:

class Number {
private int|float $number;

public function setNumber(int|float $number): void {
$this->number = $number;
}

public function getNumber(): int|float {
return $this->number;
}
}

______________________________________

Также примечательно, что этот RFC в качестве эксперимента оформлен как пул-реквест https://github.com/php/php-rfcs/pull/1 в репозиторий php/php-rfcs. Если такой подход приживётся, то в дальнейшем обсуждения RFC будут проходить на Гитхабе. Финальное голосование всё равно будет проходить на wiki.php.net.
PHP-Дайджест № 164
(27 августа – 9 сентября 2019)

https://habr.com/p/466671/

PHP 7.4.0 RC1, Laravel 6, Monolog 2 и другие релизы, Union Types, Object Initializer и прочие новости из PHP Internals, полезные инструменты, пачка подкастов и многое другое!
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 можно использовать бесплатно.
PHP-Дайджест № 165

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

https://habr.com/p/470373/
Свежие подкасты про 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/
Помните язык Perl?

Совсем недавно после долгих споров сообщество Perl приняло решение переименовать Perl 6 в Raku.

Дело в том, что Perl 6 не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык, для которого так и не было подготовлено инструментария по миграции с Perl 5. В итоге под одним именем Perl существовало два параллельно развивающихся самостоятельных языка, не совместимых друг с другом и имеющих свои сообщества разработчиков.

Всё это очень напоминает историю с P++, которая, к счастью, не получила продолжения, и пока оставила след лишь в виде стикеров и футболок. Понаблюдаем, как будет развиваться судьба Perl/Raku.
[RFC] Weak maps

https://wiki.php.net/rfc/weak_maps

В PHP 7.4 была добавлена поддержка слабых ссылок через специальный класс WeakReference.
Развивая идею дальше, для PHP 8 Никита предлагает добавить коллекцию WeakMap, которая, по сути, будет аналогом SplObjectStorage, то есть множество, в котором ключами выступают объекты. Изюминка в том, что если объект, который был ключом, перестаёт существовать (на него нет других ссылок), то он автоматически пропадает и из коллекции WeakMap.
Чёрная магия 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 и работает со структурами на низком уровне. Поэтому вполне возможны сегфолты, утечки памяти и другие неприятные последствия. Так что, только для тестов.
PHP-Дайджест № 168

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

https://habr.com/p/477318/
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
Вышел PhpStorm 2019.3

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

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

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

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

https://habr.com/ru/post/479306/
Как выбрать файлы для предзагрузки в 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 скрипт, который подгрузит нужные классы в опкэш. Звучит как годная идея, надо пробовать.
Если этим субботним утром вы думаете что бы посмотреть, то вот трансляция митапа в Казани https://www.youtube.com/watch?v=zZTv7HMxKXI
В программе аж 6 докладов.

Кстати, в списке мероприятия на декабрь в последнем выпуске дайджеста не было митапа SymСode в Питере. Он пройдёт 18 декабря в офисе JetBrains https://www.meetup.com/ru-RU/symcode/events/267106695/