PHP Digest
الذهاب إلى القناة على Telegram
PHP Дайджест Новости, материалы и инструменты из мира PHP — раз в месяц. Вопросы, замечания, предложения: @pronskiy
إظهار المزيد8 309
المشتركون
لا توجد بيانات24 ساعات
-117 أيام
+530 أيام
أرشيف المشاركات
8 308
Composer v2.0-dev
5 апреля исполнилось ровно 9 лет первому коммиту в репозиторий Composer. Готовящийся второй мажорный релиз можно попробовать уже сейчас.
Обзор всех новых фишек можно найти в этой статье https://php.watch/articles/composer-2
А чтобы попробовать Composer v2 прямо сейчас, достаточно выполнить вот такую команду:
composer self-update --snapshot
Улучшена производительность
Благодаря параллельному скачиванию метаданных и файлов пакетов установка без кэша выполняется в два раза быстрее.
Если в системе есть curl, то несколько пакетов/API-вызовов будут загружены одновременно. Кроме того, Composer v2 будет использовать HTTP/2 и переиспользовать TLS-сессии, а также DNS-ответы между HTTP-запросами для ускорения.
Офлайн-режим
Можно будет предотвратить попытки Composer v2 делать любые сетевые запросы. Полезно при запуске тестов или если есть проблемы с соединением. Если имеется composer.lock и пакеты c метаданными доступны в кэше, то Composer v2 сделает всё без дополнительных запросов.
Конечно, для полноценного офлайна нужен satis или private packagist.
Поддержка dry-run для require и remove
Опция --dry-run сейчас доступна только для composer update и позволяет не делать никаких реальных изменений, а просто посмотреть в терминале, что будет в итоге.
Теперь эту опцию можно будет использовать и для других команд, чтобы проверить установку/изменение пакетов без изменения файлов.8 308
PHP-Дайджест № 177
Расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, подкасты и многое другое.
https://habr.com/p/495838/
8 308
Enum в PHP
Тип Enum – одна из самых желанных возможностей в PHP. Есть имитации типа clabs/php-enum, spatie/enum или dbalabka/php-enumeration. Черновику RFC https://wiki.php.net/rfc/enum уже пять лет и есть реализация в Hack. И тем не менее, над тем, чтобы добавить наконец-то фичу в PHP всё ещё никто не работает.
В JetBrains, в рамках традиционной программы летней стажировки, есть две вакансии в команде PhpStorm.
Одна по Автоматизация тестирования рефакторингов для PhpStorm, а вот вторая — First-class enum support in PHP предполагает работу непосредственно под руководством Никиты Попова над реализацией Enum в PHP!
Если у вас есть знакомые студенты (Москва/Питер), которым может быть интересно — поделитесь с ними, пожалуйста, ссылкой (подача заявок до понедельника).
Даешь Enum в PHP!
8 308
Ни дня без RFC от Никиты!
https://wiki.php.net/rfc/constructor_promotion
Предлагается добавить синтаксический сахар, который позволит объявлять свойства класса прямо в конструкторе. Так же как и в TypeScript.
class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0
) {}
}
Остается открытым вопрос: стоит ли разрешить оставлять запятую после последнего параметра в сигнатуре функции?
Напомним, оставлять запятую в вызове можно начиная с PHP 7.3.
@vudaltsov | https://twitter.com/vudaltsov8 308
SymfonyLive Online – сегодня, в 16:00 UTC, Fabien Potencier и Nicolas Grekas в прямом эфире покажут, как проходит опенсорс-работа над Symfony: просмотр и мердж пул-реквестов, ответы на комментарии, участие в дискуссиях вокруг RFC, выпуск релиза Symfony 5.0.6.
А уже завтра состоится большой онлайн PHP-митап.
8 308
Также единогласно принято предложение об объектной альтернативе для token_get_all().
В PHP 8 вместо
foreach (token_get_all($code) as $token) {
if (is_string($token)) {
// одиночный символ, например, ;
continue;
}
[$pos, $text, $line] = $token;
}
можно будет писать
foreach (PhpToken::getAll($code) as $token) {
$token->id;
$token->text;
$token->line;
$token->pos;
$token->is([T_CLASS, T_CONST]);
}
При прочих равных второй вариант потребует меньше памяти и времени. Это значит, что различные парсеры, например, nikic/php-parser, doctrine/annotations или twig/twig в будущем будут работать немного быстрее 😊
Кроме того, класс PhpToken легко расширяется, статический метод getAll() предусмотрительно возвращает static[].
@vudaltsov | https://twitter.com/vudaltsov8 308
Единогласно принято предложение Никиты Попова о валидации абстрактных методов трейтов.
Фатальная ошибка будет сгенерирована в следующих случаях:
- нарушение совместимости сигнатур (кол-во аргументов, контравариантность аргументов, ковариантность возвращаемого типа),
- несовпадение статичности методов.
Также данный RFC разрешает использовать
abstract private function, но только в трейтах, так как трейт имеет доступ к приватным методам использующего его класса. В PHP 7 такой код генерирует фатальную ошибку.
Будьте внимательны, RFC, очевидно, нарушает обратную совместимость. Однако соблюдать сигнатуру при имплементации абстрактного метода вполне логично, поэтому скорее всего ваш код уже совместим с PHP 8 в этом аспекте.
@vudaltsov | https://twitter.com/vudaltsov8 308
Вышла новая мажорная версия популярной библиотеки ramsey/uuid. Из описания следует, что серьезных нарушений обратной совместимости в ней нет, а вот новых интерфейсов и исключений там целый список.
Изучаем изменения в документации и обновляемся
composer req ramsey/uuid:^4.0.
На мой взгляд, самое интересное — это поддержка пока нестандартизированного UUID v6. Новая версия UUID предложена специально для использования в качестве первичного ключа БД и обладает следующими свойствами:
- Сортировка по необработанным байтам приводит к последовательности, эквивалентной сортировке по встроенной временной метке.
- Встроенное время может быть извлечено для использования в качестве времени создания.
- Глобальная уникальность, которая является основным требованием для всех типов UUID.
Про отличия версии 6 от версии 1 и другие подробности можно прочитать в IETF черновике.
@vudaltsov | https://twitter.com/vudaltsov
________
Карантин имеет свои плюсы. Созвонились с Валентином Удальцовым и решили объединить усилия. Теперь на канале будут иногда появляться новости от Валентина, они будут подписаны как этот пост выше.
Кстати, Валентин ведёт свой канал Пых, где пишет о личном опыте разработки на PHP.8 308
Всем привет! В эту субботу планируется виртуальный PHP-митап, в котором поучаствуют ребята из ПК конференции + можно будет получить билет на ее онлайновую и оффлайновую части. И не только)
▶️ 6 докладов с трансляцией на Youtube - опыт Skyeng, ManyСhat, iSpring, SimbirSoft, а также небольших студий и независимых разработчиков
🎛 Обсуждения голосом со спикерами - в отдельной видеокомнате после каждого доклада
🍕 Пицца с доставкой на дом за вопросы после каждого доклада
🏆 PHP-викторина с Романом Пронским, необычный розыгрыш билета на PHP Russia, пхпбот и другие интерактивы в перерывах.
И все это не выходя из телефона или 💻 ноутбука) Присоединяйся: https://meetups-online.ru/virtual_php_meetup
p.s. Спасибо @samdark и @pronskiy
за поддержку идеи!
8 308
PHP-Дайджест № 176
Обновления PHP и Composer 1.10, переносы конференций, 3 новых RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.
https://habr.com/p/493594/
8 308
str_contains() в PHP 8
https://wiki.php.net/rfc/str_contains
Не прошло и 25 лет и вот в PHP добавили функцию, которая проверяет, содержится ли строка в другой строке.
str_contains(string $haystack, string $needle) :bool
str_contains("abc", "a"); // true
str_contains("abc", "d"); // false
Конечно, это всего лишь эквивалент
strpos($haystack, $needle) !== false
но приятная мелочь.
В качестве альтернатив для работы со строками уже есть symfony/string или, например, voku/Stringy.8 308
PHP-Дайджест № 175
Релизы Laravel 7 и CodeIgniter 4, атрибуты v2 и другие RFC-предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.
https://habr.com/p/491660/
8 308
Stringable Interface
https://wiki.php.net/rfc/stringable
Предложение от Nicolas Grekas принято. В PHP 8 можно будет использовать union-тип
string|Stringable там, где ожидается строка, и передавать классы с __toString().
Интересно, что при этом если в классе реализован магический метод __toString(), то добавлять implements Stringable можно, но необязательно, потому что он неявно будет имплементирован автоматически, прям как в Golang.8 308
Плагин для PhpStorm
https://habr.com/ru/company/badoo/blog/490024/
В статье от Badoo подробно о том, как писать свой плагин с подробным разбором реализации кастомной инспекции, а также демо других фишек, которые можно сделать: работа с БД, кодогенерация, добавление статистики от профайлера прямо в код и прочее.
И в дополнение несколько полезных плагинов, может какие-то из них вы ещё не пробовали.
• Php Inspections (EA Extended) — очень много дополнительных инспекций (архитектура, качество, безопасность, и др).
• deep-assoc-completion — дополнение кода для ассоциативных массивов.
• Key Promoter X — поможет выучить горячие клавиши. Или хотя бы Alt+Enter вместо клика на лампочку.
• 3v4l pl4g1n — быстро запустить выделенный код на 3v4l.org, чтоб сравнить на всех версиях PHP.
• String Manipulation — дополнительные действия над строками.
• CodeGlance — мини-карта а-ля sublime.
• Rainbow Brackets — раскрашивает скобки разными цветами, чтоб быстро находить глазами.
#PhpStorm
8 308
Laracon Online
#конференции #розыгрыш
https://laracon.net/
Конференция проходит в виде онлайн-трансляции, так что присоединиться можно из любого места и ехать никуда не нужно и можно смотреть компанией.
Начало завтра в 9:00 UTC-5 (первый доклад в 10:00). Тейлор расскажет про Laravel 7, а вся программа тут https://laracon.net/#time-table
Разыгрываем 5 билетов.
*
Победители: Aliaksandr Burshtyn, Roman, Dzianis Yurevich, Ilia Lazarev, Alexey Shapilov
8 308
PHP-Дайджест № 174
5 новых RFC из PHP Internals, а также предложение по развитию языка и пара прототипов новых фич для PHP в виде пул-реквестов, порция полезных инструментов, видео, подкасты и многое другое.
https://habr.com/p/489662/
8 308
PHP Russia 2020
#конференции #розыгрыш
https://phprussia.ru/moscow/2020/
Раз у меня есть доступ к конференциям, то почему бы не воспользоваться админресурсом и не делиться этим с вами? Если идея зайдёт, то будем разыгрывать билеты на другие мероприятия чаще. В пуле уже есть PHP fwdays, Laracon Online, PHPKonf, PHP Serbia.
Начнём с конференции в Москве.
Что имеем на данный момент:
• Nicolas Grekas, по сути, главный человек в разработке Symfony сегодня
• Макс Рафалко, автор Infection, о мутационном тестировании из первых рук
• Антон Титов, автор RoadRunner, но на этот раз с докладом о своей Cycle ORM
• Алексей Матюхин из Badoo о реальном опыте применения стат анализа (PHPStan, Psalm, Phan, NoVerify)
Промокод на билеты со скидкой 7%: PHPDIGEST
На конференцию можно попасть бесплатно, если ты докладчик :Roll Safe: 💁🏿♂️
Приём заявок открыт ещё два дня: https://conf.ontico.ru/lectures/propose?conference=pc2020
А вот и розыгрыш билета.
Всё, что нужно сделать, просто нажмите на кнопку, но только если вы сможете приехать в Москву 13 мая на конференцию PHP Russia 2020. (Счётчик обновляется с задержкой)
Если не сможете приехать, пожалуйста, не жмите.
*****
Победители: Andrew Tkachuk
8 308
Будущее развитие PHP
https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-language-evolution.md
Никита опубликовал черновик RFC с предложением установить механизм введения в язык новых глобальных или ломающих обратную совместимость фич. И рассмотрел возможные пути решения:
1. Новый язык (P++)
При всех своих недостатках, одно из преимуществ тут в том, что можно делать совершенно радикальные изменения. Например, убрать
$ из переменных. Но мы помним судьбу Perl/Raku.
2. Editions (редакции/издания)
Идея позаимствована из Rust, в разработку которого Никита тоже вовлечён.
По сути, это набор обратно-несовместимых изменений, объединенных под одним именем. Такой вариант интересен как с технической так и с маркетинговой точки зрения.
3. Директивы declare на каждую фичу
То есть на каждое крупное изменение вводить отдельную директиву по типу strict_types.
___
Поскольку против нового языка уже неофициально проголосовали и единогласно отмели идею, то дальше Никита рассматривает технические аспекты реализации единшов/директив.
Варианты тут такие:
• Текущая реализация с объявлениями в каждом файле
declare(strict_types=1) или в случае едишнов declare(edition=2020)
• Новый открывающий тег
Например, для едишнов: <?php2020
• Указание директив для пространств имён (RFC)
namespace_declare('Vendor\Lib', [
'strict_types' => 1,
'no_dynamic_properties' => 1,
// ...
]);
• Ввести понятие пакета в PHP
Прототип этого варианта оформлен в виде пул-реквеста.
Пакет надо будет явно объявлять в каждом файле.
<?php package "nikic/php-parser"; namespace PhpParser\Node;• Что-то на основе файловой системы Например добавлять файл
.package.php в корне пакета, который будет содержать нужную метаинформацию.
В конце Никита подводит выводу, что оптимальный вариант — это едишны + declare директивы в каждом файле.8 308
PHP-Дайджест № 173
PHPUnit 9 и другие релизы, 3 свежих RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое!
https://habr.com/p/487690/
8 308
PhpStorm 2020.1 EAP
https://blog.jetbrains.com/phpstorm/2020/01/phpstorm-2020-1-early-access-program-is-now-open/
Upd: Поправил ссылку.
Наконец-то запустили программу раннего доступа для первого в этом году мажорного релиза PhpStorm.
Будем улучшать разные подсистемы, в том числе вывод типов в PHP, VCS и прочее. Конечно, производительности будет много внимания.
Описывать все изменения планирую порциями каждую неделю, поэтому подписывайтесь на Twitter phpstorm или старый добрый RSS блога.
В первом посте об улучшениях для Composer – теперь практически всё можно делать прямо в редакторе в файле composer.json. Есть автокомплит, переходы к файлам, запуск скриптов и прочее.
+ PCOV и PHPDBG для подсчёта покрытия, кастомизация тегов Twig, минимально обновили светлую тему, шрифт JetBrains Mono по умолчанию, пачка улучшения для Git, но о них позже.
По традиции EAP билды выходят каждую неделю и их можно использовать совершенно бесплатно.
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
