PHP RFC: Marking return values as important (#[\NoDiscard])
За internals не успеть в последнее время! Вот уже на голосование вышел RFC от Tim Düsterhus и Volker Dusch. Они предлагают добавить в PHP атрибут
Возвращаемое значение считается использованным, если оно участвует в выражении или присваивании. Чтобы избежать предупреждения и явно в коде обозначить намерение не использовать результат вызова функции с
Использование
По мнению авторов, этот атрибут будет полезен для функций с сайд-эффектами, которые при этом ещё что-то возвращают, например, ошибки.
https://wiki.php.net/rfc/marking_return_value_as_important
За internals не успеть в последнее время! Вот уже на голосование вышел RFC от Tim Düsterhus и Volker Dusch. Они предлагают добавить в PHP атрибут
#[NoDiscard]
— им можно будет пометить функции и методы, возвращаемое значение которых не стоит игнорировать. Например, вот такой код будет кидать E_WARNING
, если RFC примут:
$date = new DateTimeImmutable('2024-1-1');
$date->setDate(2025, 1, 1); // E_WARNING
echo $date->format('Y'); // 2024
Возвращаемое значение считается использованным, если оно участвует в выражении или присваивании. Чтобы избежать предупреждения и явно в коде обозначить намерение не использовать результат вызова функции с
#[NoDiscard]
, авторы RFC предлагают добавить (void)
каст. Он превратит выражение в инструкцию:
flock($stream, LOCK_EX); // E_WARNING
(void) flock($stream, LOCK_EX); // OK
if ((void) flock($stream, LOCK_EX)) {} // Parse error
Использование
#[NoDiscard]
в функциях и методах, возвращающих void
, never
, а также в магических методах и хуках свойств приведёт к фатальной ошибке на этапе интерпретации.По мнению авторов, этот атрибут будет полезен для функций с сайд-эффектами, которые при этом ещё что-то возвращают, например, ошибки.
https://wiki.php.net/rfc/marking_return_value_as_important
Пых
PHP RFC: Marking return values as important (#[\NoDiscard]) За internals не успеть в последнее время! Вот уже на голосование вышел RFC от Tim Düsterhus и Volker Dusch. Они предлагают добавить в PHP атрибут #[NoDiscard] — им можно будет пометить функции и…
Что я сам думаю по этому поводу?
Имхо, это такой же бесполезный атрибут, как и
По сути, это очередная проблема, которая должна решаться статическим анализом, а не рантаймом.
Имхо, это такой же бесполезный атрибут, как и
#[Override]
. Никакого спроса лично у меня на эту фичу нет. Наверное, потому, что мои функции либо не мутируют стейт, либо возвращают void
. Ну а к особенностям нативного апи я давно привык.По сути, это очередная проблема, которая должна решаться статическим анализом, а не рантаймом.
Media is too big
VIEW IN TELEGRAM
Коллекционный PHP-слоник 💙 Пых!
Как вы все знаете, маскот языка PHP — слон. В 1998 году Vincent Pontier придумал дизайн оригинального плюшевого слоника, который с тех пор был многократно переосмыслен по различным поводам.
Я давно мечтал о слоне для Пыха, и в конце прошлого года благодаря Сергею Пантелееву мне удалось заказать прототип: аккуратного синего слоника с логотипом канала на боку и белыми лапками.
Чтобы запустить в производство целую партию, я решил создать краудфандинговую кампанию! Среди вознаграждений — слоник Пых, слоник PHP 8 Сергея, та самая долгожданная лекция по Message Bus и личная встреча со мной. Переходите по ссылке и принимайте участие. Буду бесконечно рад, если у нас получится воплотить в жизнь этот проект!💙
https://planeta.ru/campaigns/phpyh_slon
Как вы все знаете, маскот языка PHP — слон. В 1998 году Vincent Pontier придумал дизайн оригинального плюшевого слоника, который с тех пор был многократно переосмыслен по различным поводам.
Я давно мечтал о слоне для Пыха, и в конце прошлого года благодаря Сергею Пантелееву мне удалось заказать прототип: аккуратного синего слоника с логотипом канала на боку и белыми лапками.
Чтобы запустить в производство целую партию, я решил создать краудфандинговую кампанию! Среди вознаграждений — слоник Пых, слоник PHP 8 Сергея, та самая долгожданная лекция по Message Bus и личная встреча со мной. Переходите по ссылке и принимайте участие. Буду бесконечно рад, если у нас получится воплотить в жизнь этот проект!
https://planeta.ru/campaigns/phpyh_slon
Please open Telegram to view this post
VIEW IN TELEGRAM
Пых
Коллекционный PHP-слоник 💙 Пых! Как вы все знаете, маскот языка PHP — слон. В 1998 году Vincent Pontier придумал дизайн оригинального плюшевого слоника, который с тех пор был многократно переосмыслен по различным поводам. Я давно мечтал о слоне для Пыха…
Ребята, мы уже собрали 25%! Я в шоке. Спасибо!
Пых
self вместо static в финальных классах
Изначально я садился писать этот пост, но решил вас предварительно разогреть...😉
Представьте себе такую ситуацию:
Есть ли тут ошибка? Поначалу кажется, что есть. В интерфейсе сказано: нужно вернуть инстанс класса позднего статического связывания, а реализация использует более широкий тип
А теперь обратим внимание, что класс
Недавно подписчик Пыха @m1chael19 закинул PR с исправлением этого недоразумения. Фикс посчитали очень логичным и смерджили в 8.5 без RFC. Поздравим Михаила с первым контрибьютом в PHP!
https://github.com/php/php-src/pull/17724
https://3v4l.org/qWDQY/rfc#vgit.master
Изначально я садился писать этот пост, но решил вас предварительно разогреть...
Представьте себе такую ситуацию:
interface A
{
public static function new(): static;
}
final class B implements A
{
public static function new(): self
{
return new self();
}
}
Есть ли тут ошибка? Поначалу кажется, что есть. В интерфейсе сказано: нужно вернуть инстанс класса позднего статического связывания, а реализация использует более широкий тип
self
и поэтому нарушает LSP. PHP тоже так считает: https://3v4l.org/qWDQY.А теперь обратим внимание, что класс
B
финальный! В цепочке наследования после B
уже никого не может быть, это самый "поздний" возможный класс. В финальном классе всегда self =:= static
. Так что ошибки на самом деле нет!Недавно подписчик Пыха @m1chael19 закинул PR с исправлением этого недоразумения. Фикс посчитали очень логичным и смерджили в 8.5 без RFC. Поздравим Михаила с первым контрибьютом в PHP!
https://github.com/php/php-src/pull/17724
https://3v4l.org/qWDQY/rfc#vgit.master
Please open Telegram to view this post
VIEW IN TELEGRAM
3v4l.org
Online PHP editor | output for qWDQY
Run your php code online; get statistics, vld output and compare output from all versions.
Друзья, я долго вынашивал этот план. Заручился поддержкой трёх родных ивент-компаний и сегодня принял окончательное решение:
В сентябре у нас будет Пых.Конф!
Подробности чуть позже.
В сентябре у нас будет Пых.Конф!
Подробности чуть позже.
Кодим с джуном на PHP #2 / Павел Бучнев учит Валентина работать с Claude
На этот раз джуном буду я! Когда Павел Бучнев с канала PHP Fart Time узнал, что я всячески сопротивляюсь использованию LLM, он тут же решил меня переубедить, а заодно показать, как пишет код с помощью Claude и какие инструменты использует.
Встречаемся в ближайшую среду (26 марта) в
YouTube: https://youtu.be/UIrl1lIF2tE
VK Видео: https://vkvideo.ru/video-228746873_456239029
На этот раз джуном буду я! Когда Павел Бучнев с канала PHP Fart Time узнал, что я всячески сопротивляюсь использованию LLM, он тут же решил меня переубедить, а заодно показать, как пишет код с помощью Claude и какие инструменты использует.
Встречаемся в ближайшую среду (26 марта) в
19:00
!YouTube: https://youtu.be/UIrl1lIF2tE
VK Видео: https://vkvideo.ru/video-228746873_456239029
YouTube
Кодим с джуном на PHP #2 / Павел Бучнев учит Валентина работать с Claude
На этот раз джуном буду я! Когда Павел Бучнев с канала PHP Fart Time узнал, что я всячески сопротивляюсь использованию LLM, он тут же решил меня переубедить, а заодно показать, как пишет код с помощью Claude и какие инструменты использует.
Генератор контекста:…
Генератор контекста:…
Пых
Кодим с джуном на PHP #2 / Павел Бучнев учит Валентина работать с Claude На этот раз джуном буду я! Когда Павел Бучнев с канала PHP Fart Time узнал, что я всячески сопротивляюсь использованию LLM, он тут же решил меня переубедить, а заодно показать, как пишет…
Кодим с джуном на PHP #2 / Павел Бучнев учит Валентина работать с Claude
Сегодня Павел Бучнев заставит меня попробовать Claude! Посмотрим, что из этого выйдет!
Стрим перенесли на час, присоединяйтесь в
YouTube: https://youtu.be/UIrl1lIF2tE
VK Видео: https://vkvideo.ru/video-228746873_456239029
Генератор контекста: https://docs.ctxgithub.com/
Промпт: https://gist.github.com/butschster/1b7e597691cc1a6476b15dc120ecbddb
Сегодня Павел Бучнев заставит меня попробовать Claude! Посмотрим, что из этого выйдет!
Стрим перенесли на час, присоединяйтесь в
20:00
.YouTube: https://youtu.be/UIrl1lIF2tE
VK Видео: https://vkvideo.ru/video-228746873_456239029
Генератор контекста: https://docs.ctxgithub.com/
Промпт: https://gist.github.com/butschster/1b7e597691cc1a6476b15dc120ecbddb
YouTube
Кодим с джуном на PHP #2 / Павел Бучнев учит Валентина работать с Claude
На этот раз джуном буду я! Когда Павел Бучнев с канала PHP Fart Time узнал, что я всячески сопротивляюсь использованию LLM, он тут же решил меня переубедить, а заодно показать, как пишет код с помощью Claude и какие инструменты использует.
Генератор контекста:…
Генератор контекста:…
Open Source Цех #4 / PHP-CS-Fixer, Brick\Math, Infection
Сегодня в очередном выпуске Цеха изучим ревью моего PR в PHP-CS-Fixer с прошлых стримов, поконтрибьютим в пару проектов и посмотрим на канал @open_source_php от Димы Дерепко.
Приходите в 18, разогрею вас перед стримом фартанов!
https://youtu.be/viWYmUUsD5I
https://vkvideo.ru/video-228746873_456239037
Сегодня в очередном выпуске Цеха изучим ревью моего PR в PHP-CS-Fixer с прошлых стримов, поконтрибьютим в пару проектов и посмотрим на канал @open_source_php от Димы Дерепко.
Приходите в 18, разогрею вас перед стримом фартанов!
https://youtu.be/viWYmUUsD5I
https://vkvideo.ru/video-228746873_456239037
YouTube
Open Source Цех #4 / PHP-CS-Fixer, Brick\Math, Infection
Сегодня в очередном выпуске Цеха изучим ревью моего PR в PHP-CS-Fixer с прошлых стримов, поконтрибьютим в пару проектов и посмотрим на канал https://www.tgoop.com/open_source_php от Димы Дерепко.
0:00 Вступление
0:36 Пых.Конф в сентябре
2:24 Где мои слоны?
5:28 After…
0:00 Вступление
0:36 Пых.Конф в сентябре
2:24 Где мои слоны?
5:28 After…
Пых
Open Source Цех #4 / PHP-CS-Fixer, Brick\Math, Infection Сегодня в очередном выпуске Цеха изучим ревью моего PR в PHP-CS-Fixer с прошлых стримов, поконтрибьютим в пару проектов и посмотрим на канал @open_source_php от Димы Дерепко. Приходите в 18, разогрею…
Как подменить файл из autoload.files
Сегодня в конце стрима я написал в тикете Infection, почему мутация функций очень полезна. Один из мейнтейнеров поставил под вопрос возможность подмены оригинальных файлов из секциине на жену, а в код сгенерированного автолоадера Composer:
И придумал следующую лазейку:
Да, грязновато, но, похоже, это единственный способ добавить мутацию функций в Infection...
Готовы вместе со мной поработать в Цеху в эти выходные?! Ставьте💯 , если да!
Сегодня в конце стрима я написал в тикете Infection, почему мутация функций очень полезна. Один из мейнтейнеров поставил под вопрос возможность подмены оригинальных файлов из секции
autoload.files
на мутированные. Ну а поскольку я обожаю такие вызовы, я пошёл смотреть if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
}
И придумал следующую лазейку:
function disableAutoloadFile(string $vendorDir, string $file): void
{
/** @var array<non-empty-string, non-empty-string> */
$idToFileMap = require $vendorDir . '/composer/autoload_files.php';
$id = array_search(realpath($file), $idToFileMap);
if ($id === false) {
throw new LogicException("File `{$file}` is not registered in autoload.files");
}
if (isset($GLOBALS['__composer_autoload_files'][$id])) {
throw new LogicException("File `{$file}` is already loaded");
}
$GLOBALS['__composer_autoload_files'][$id] = true;
}
disableAutoloadFile(__DIR__ . '/vendor', __DIR__ . '/src/functions.php');
require_once $infectionTmp . '/functions_mutated.php';
require_once __DIR__ . '/vendor/autoload.php';
Да, грязновато, но, похоже, это единственный способ добавить мутацию функций в Infection...
Готовы вместе со мной поработать в Цеху в эти выходные?! Ставьте
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Пых
Open Source Цех #4 / PHP-CS-Fixer, Brick\Math, Infection
Сегодня в очередном выпуске Цеха изучим ревью моего PR в PHP-CS-Fixer с прошлых стримов, поконтрибьютим в пару проектов и посмотрим на канал @open_source_php от Димы Дерепко.
Приходите в 18, разогрею…
Сегодня в очередном выпуске Цеха изучим ревью моего PR в PHP-CS-Fixer с прошлых стримов, поконтрибьютим в пару проектов и посмотрим на канал @open_source_php от Димы Дерепко.
Приходите в 18, разогрею…
Пых
Как подменить файл из autoload.files Сегодня в конце стрима я написал в тикете Infection, почему мутация функций очень полезна. Один из мейнтейнеров поставил под вопрос возможность подмены оригинальных файлов из секции autoload.files на мутированные. Ну а…
Open Source Цех #5 / Мутация функций в Infection
Через час в 15 жду всех в Цеху! Попробуем научить Infection мутировать функции, а заодно разберёмся, как работает замечательный фреймворк мутационного тестирования от Макса Рафалко.
YouTube: https://youtu.be/UTaRm_sZr_w
VK Видео: https://vkvideo.ru/video-228746873_456239039
Тикет: https://github.com/infection/infection/issues/1482
Задонатить: https://www.donationalerts.com/r/vudaltsov
Через час в 15 жду всех в Цеху! Попробуем научить Infection мутировать функции, а заодно разберёмся, как работает замечательный фреймворк мутационного тестирования от Макса Рафалко.
YouTube: https://youtu.be/UTaRm_sZr_w
VK Видео: https://vkvideo.ru/video-228746873_456239039
Тикет: https://github.com/infection/infection/issues/1482
Задонатить: https://www.donationalerts.com/r/vudaltsov
YouTube
Open Source Цех #5 / Мутация функций в Infection
В этом выпуске Цеха мы с вами попробуем научить Infection мутировать функции! Заодно поймём в нюансах, как работает этот замечательный фреймворк мутационного тестирования от Макса Рафалко.
Тикет с обсуждением: https://github.com/infection/infection/issues/1482…
Тикет с обсуждением: https://github.com/infection/infection/issues/1482…
Пых
Open Source Цех #5 / Мутация функций в Infection Через час в 15 жду всех в Цеху! Попробуем научить Infection мутировать функции, а заодно разберёмся, как работает замечательный фреймворк мутационного тестирования от Макса Рафалко. YouTube: https://youtu.be/UTaRm_sZr_w…
Open Source Цех #5 / Мутация функций в Infection
Залетайте в Цех, начинаю разбирать Infection!
YouTube: https://youtu.be/UTaRm_sZr_w
VK Видео: https://vkvideo.ru/video-228746873_456239039
Тикет: https://github.com/infection/infection/issues/1482
Задонатить: https://www.donationalerts.com/r/vudaltsov
Комментировать можно под этим постом.
Залетайте в Цех, начинаю разбирать Infection!
YouTube: https://youtu.be/UTaRm_sZr_w
VK Видео: https://vkvideo.ru/video-228746873_456239039
Тикет: https://github.com/infection/infection/issues/1482
Задонатить: https://www.donationalerts.com/r/vudaltsov
Комментировать можно под этим постом.
YouTube
Open Source Цех #5 / Мутация функций в Infection
В этом выпуске Цеха мы с вами попробуем научить Infection мутировать функции! Заодно поймём в нюансах, как работает этот замечательный фреймворк мутационного тестирования от Макса Рафалко.
Тикет с обсуждением: https://github.com/infection/infection/issues/1482…
Тикет с обсуждением: https://github.com/infection/infection/issues/1482…
Пых
Коллекционный PHP-слоник 💙 Пых! Как вы все знаете, маскот языка PHP — слон. В 1998 году Vincent Pontier придумал дизайн оригинального плюшевого слоника, который с тех пор был многократно переосмыслен по различным поводам. Я давно мечтал о слоне для Пыха…
Последняя возможность купить 💙 слона!
В прошлую среду кампания по сбору средств на партию коллекционных слоников Пых достигла финансовой цели, преодолев порог в ₽400к! Это очень круто, я не ожидал, что всё получится так быстро — спасибо вам огромное за такую мощную поддержку!
Производство стартовало ещё на прошлой неделе, ориентировочная дата завершения — 1 июля. С учётом доставки партии из Иркутска в Москву, я надеюсь, что начну вам отправлять слоников уже 7 июля.
А теперь радостные новости по поводу лекции. Сегодня я связался с менеджером planeta.ru, объяснил, что нам нет смысла ждать 20 апреля, и она согласилась завершить проект досрочно — 2 апреля!
Это означает, что у тех, кто ещё не заказал слоника, осталось 3 дня, чтобы поддержать проект. А я тем временем начинаю готовиться к лекции по MessageBus. До встречи!
https://planeta.ru/campaigns/phpyh_slon
В прошлую среду кампания по сбору средств на партию коллекционных слоников Пых достигла финансовой цели, преодолев порог в ₽400к! Это очень круто, я не ожидал, что всё получится так быстро — спасибо вам огромное за такую мощную поддержку!
Производство стартовало ещё на прошлой неделе, ориентировочная дата завершения — 1 июля. С учётом доставки партии из Иркутска в Москву, я надеюсь, что начну вам отправлять слоников уже 7 июля.
А теперь радостные новости по поводу лекции. Сегодня я связался с менеджером planeta.ru, объяснил, что нам нет смысла ждать 20 апреля, и она согласилась завершить проект досрочно — 2 апреля!
Это означает, что у тех, кто ещё не заказал слоника, осталось 3 дня, чтобы поддержать проект. А я тем временем начинаю готовиться к лекции по MessageBus. До встречи!
https://planeta.ru/campaigns/phpyh_slon
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM