Telegram Web Link
Итоги второго Пыхапа

Митап прошёл просто охуенно. Горжусь всеми, кто его делал и кто в нём участвовал! Получилось технично, душевно и празднично. 😊

Все доклады есть в записи с таймкодами на YouTube и VKВидео.

Открытый микрофон был разрывным. Спасибо ребятам за смелость и интересные мысли. Как и планировалось, мы ничего не записывали, поэтому я просто перечислю темы и героев:
▸ "Трюки и хитрости Docker" (Павел Иванов),
▸ "Как мы Query параметры через LZString готовим" (Максим Шек),
▸ "Как и зачем жить без дейликов" (Арсений Скурт),
▸ "Symbiotic PHP — микрофреймворк для говнокода микросервисов" (Павел Дузов).

Когда следующий Пыхап? Всё зависит от вас, потому что главное — контент. Ждём ваши заявки на доклад!

Также мы всегда рады спонсорам. Спасибо Happy Job и PremiumBonus за поддержку первых двух мероприятий. Если ваша компания хочет стать следующей — напишите мне в личку.

До встречи в офлайне!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Обзор PHP RFC #1

Друзья, вместо "Кодим с джуном" сегодня импровизированный стрим — посмотрим новые RFC в PHP! А с Женей встретимся в другой день.

Залетайте!

https://youtu.be/XSVld58EAMI
https://vkvideo.ru/video-228746873_456239025
RFC: Static property asymmetric visibility

Как вы, наверное, знаете, в PHP 8.4 новоиспечённые хуки нельзя использовать для статических свойств. Сегодня стартовало голосование за RFC, который это разрешит в 8.5.


class Example
{
public private(set) static string $classTitle = 'Example class';

// Implicitly public-read, just like object properties.
protected(set) static int $counter = 0;

public static function changeName(string $name): void
{
// From private scope, so this is allowed.
self::$classTitle = $name;
}
}

print Example::$classTitle; // Allowed.

Example::$classTitle = 'Nope'; // Disallowed.


https://wiki.php.net/rfc/static-aviz
Всех люблю! Ваш Валентин. 🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP True Async

Только что от Эдмона Дантеса (его реально так зовут?) в internals прилетел вот такой запрос!

Пока это просто письмо, но всё равно радостно, что кто-то поднимает флаг и дальше развивает асинк. С нетерпением ждём RFC!

https://externals.io/message/126402
Пыхап ищет спонсора!

Пыхап — это не только способ выступить и круто провести время, но ещё и возможность привлечь внимание к вашей компании, рассказать о команде и получить отклики на релевантные вакансии.

Мы планируем провести третий московский Пыхап уже в апреле. Запланированы крутые доклады, Открытый микрофон и афтепати, не хватает только спонсора!

В обмен на финансирование мероприятия мы рассказываем о компании в анонсах и на мероприятии, интегрируем её айдентику в наши макеты. Мы открыты и для других форматов, например, было бы здорово придумать совместный интерактив для участников.

Пыхари, буду рад, если вы перешлёте этот пост своим HR и поделитесь с ними впечатлениями о прошедших меропритиях. По поводу спонсорства можно писать в личку.

Про первый Пыхап: https://www.tg-me.com/phpyh/557.
Итоги второго: https://www.tg-me.com/phpyh/636.
Closure в константных выражениях в PHP 8.5

В 8.5 приняты два RFC:
PHP RFC: Support Closures in constant expressions,
PHP RFC: First Class Callables in constant expressions.

Они позволяют использовать анонимные функции и first class callable синтаксис в константных выражениях (значениях параметров по умолчанию, константах, константах класса и атрибутах).

Как всегда в PHP нельзя что-то добавить без "но". В данном случае исключение сделано для стрелочных функций, потому что они автоматически захватывают контекст, а константные выражения не могут содержать переменные.


final class Request
{
#[Validate(is_string(...))]
#[Validate(static function (string $locale): bool {
return preg_match('/^[a-z]{2}$/', $locale);
})]
public mixed $locale = 'ru';
}

final readonly class Checks
{
public const Closure IS_STRING = is_string(...);

public const Closure IS_LOCALE = static function (string $locale): bool {
return preg_match('/^[a-z]{2}$/', $locale);
};
}

final readonly class Worker
{
public function __construct(
private Closure $onFinish = static function (): void {}
) {}

// ...
}
Есть тут такие, кто, как и я, не юзает чат-боты и счастливо живёт?
Anonymous Poll
54%
Да!
46%
Нет, ИИ — наше всё, а ты чёртов ретрогад.
PHP RFC: Marking return values as important (#[\NoDiscard])

За 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. Ну а к особенностям нативного апи я давно привык.

По сути, это очередная проблема, которая должна решаться статическим анализом, а не рантаймом.
2025/07/04 15:12:02
Back to Top
HTML Embed Code: