Пых @phpyh Channel on Telegram

Пых

@phpyh


Блог @vudaltsov о разработке на PHP. Реклама и вакансии НЕ размещаются.

YouTube: https://youtube.com/@phpyh
VK Видео: https://vkvideo.ru/@phpyh
Мемы про PHP: https://t.me/isPHPdying

Пых (Russian)

Добро пожаловать в канал "Пых"! Здесь вы найдете интересные статьи и обсуждения о разработке на PHP от самого @vudaltsov. Этот канал - настоящий кладезь знаний для тех, кто интересуется программированием на PHP и хочет быть в курсе последних трендов и технологий. @vudaltsov делится своим опытом и советами, помогая развиваться как начинающим, так и опытным разработчикам. Здесь вы также найдете обсуждения различных тем, связанных с PHP, и сможете делиться своими мыслями с другими участниками канала. Не упустите возможность быть в курсе всех новостей мира PHP и общаться с единомышленниками. Подписывайтесь на канал "Пых" и становитесь частью сообщества профессионалов в области веб-разработки на PHP! Реклама и вакансии НЕ размещаются в этом канале, здесь только полезная информация и обсуждения о PHP.

Пых

31 Dec, 21:40


Дорогие пыхари, с Новым Годом!

От планов на 2025 у меня захватывает дух. Нас ждёт куча нового: стримы и посты, проекты и библиотеки, митапы и доклады, мерч от Пыха и PHP 8.5!

Кстати, наша первая очная встреча в новом году не за горами. Программный комитет уже собрал мощную тройку спикеров, и я рад объявить, что второй Пыхап пройдёт 8 февраля! Ну а в онлайне мы пересечёмся, конечно, значительно раньше.

Всех обнимаю и поздравляю от всей души! 💙️️️️️️

Пых

30 Dec, 16:25


Друг привёз подарок из Нидерландов и вручил перед началом спектакля. Адель, привет тебе!

Пых

30 Dec, 13:41


PHP Point теперь Пых!

Когда мы с Ромой Пронским запускали канал на YouTube в июле 2020, мы планировали, что контент для него будут делать сразу несколько людей, и поэтому назвали его "PHP Point" — точка встречи лидеров мнения PHP сообщества. Я нарисовал логотип, Рома заказал у подруги дизайн обложек. Мы начали с публичного собеседования (кстати, это до сих пор самый популярный ролик на канале), затем вместе с Алексеем и Алисами из SkyEng организовали кучу крутых стримов: про рефакторинг валидатора, про трейты, про PHP 8. Параллельно Рома выпускал PHP Digest Live.

Потом был большой перерыв, и с 2022 я продолжил делать ролики один. В итоге смысл названия "PHP Point" утратился, и сегодня я переименовал канал в "Пых", чтобы в новом году развивать весь свой контент под одним брендом. Спасибо Роме, что дал мне на это добро!

https://youtube.com/@phpyh

Пых

28 Dec, 06:44


PHP 8.4: живее всех живых!

Мой доклад с PHP Russia 2024. На понятных примерах объясняю суть трёх главных фичей нового пыха: property hooks / asymmetric visibility, lazy objects и BCMath\Number.

https://youtu.be/DSM6DO6hB2c
https://vudaltsov.github.io/php84-slides/

Пых

27 Dec, 16:19


Итоги 2024 года канала Пых в цифрах

Спасибо вам, всех люблю! 💙️️️️️️

Пых

26 Dec, 15:03


Финал викторины по PHP в стиле "Своя Игра": Несмеянов vs Гагарин vs Бучнев

Друзья, я вчера не специально провёл стрим одновременно со "Своей Игрой" от CutCode. Ребята объявили о ней заранее, так что я приношу свои извинения, постараюсь внимательнее следить за анонсами нашего сообщества. Вы тоже не стесняйтесь писать в комментариях, если я с кем-то пересекаюсь.

Благо, всё есть в записи, приглашаю вас посмотреть игру на YouTube и в Telegram.

💙

Пых

25 Dec, 16:00


PHP-линч #27.2. Финализирую своё видение Yii3 Data

Залетайте на любую площадку: YouTube, Telegram и VK Видео.
Репозиторий: https://github.com/phpyh/yii3-data.

Комментировать можно прямо под этим постом!

Стрим отлично прошёл, всем спасибо за участие и комментарии. Записи доступны в YouTube и VK Видео. Буду признателен за донаты, только сейчас сервис снова заработал.

Пых

25 Dec, 16:00


Live stream scheduled for

Пых

25 Dec, 07:26


Пагинация

Перед стримом решил освежить свои познания пагинации, вдруг что-то новое придумали. Но нет, по-прежнему есть два варианта: offset и keyset (иногда её ещё называют "курсорная"). Offset пагинация в немилости, потому что неэффективна на дальних страницах: при обработке запроса вида limit :page_size offset :offset база вынуждена извлечь все offset + limit строк. Keyset пагинация решает эту проблему, используя формулу where id > :previous_id limit :page_size, но зато не позволяет прыгать по страницам. Ещё она не страдает от неожиданных смещений при добавлении или удалении строк в таблице.

Когда на Stack Overflow кто-то спрашивает: "А как же мне построить классическую пагинацию с циферками, используя keyset метод?", ему обычно отвечают: "А зачем? Ты можешь себе представить пользователя, который прыгает на сотую страницу? Сделай бесконечный скролл..."

И тут я подумал: если пользователь редко ходит дальше условной третьей страницы, то и offset навигация будет неплохо справляться! На четвёртой странице можно ничего не выводить, а просить уточнить выборку с помощью фильтров и сортировки. Кстати, Google так и делает. В поисковике самая обыкновенная offset навигация: https://google.com/search?q=pagination&num=20&start=100, при этом из 129 млн. результатов он показывает чуть больше 200 (у меня вывел 24 страницы по 10). А вот Gmail не может себе позволить не показывать все письма, поэтому в нём реализована keyset навигация, только не с бесконечно прокруткой, а с кнопками ◀️▶️.

Ориентируясь на эти два примера, выбирайте, какой подход лучше подойдёт вам в каждом конкретном случае, а мы сегодня в 19 красиво зарешаем оба варианта!

Пых

24 Dec, 13:36


PHP-линч #27.2. Финализирую своё видение Yii3 Data

Судя по комментариям, вам очень зашёл предыдущий стрим про Yii3 Data, поэтому не буду тянуть с продолжением! В этот раз исправим ошибки, упростим код, добавим фильтры-спецификации и пагинаторы.

Начало завтра в 19 в Telegram, YouTube и VK Видео.

Пых

23 Dec, 14:30


Пыхап #2. Приём заявок на доклады

Друзья, программный комитет начал готовить второй Пыхап! Мы ориентируемся на конец января, но точная дата будет зависеть от результатов поиска новой площадки.

Теперь к программе. У нас есть два свободных слота: новичковый и хардкорный, оба офлайн. Новичковый мы добавили для тех, кто ещё не выступал, но очень хочет начать. Можно взять средней сложности тему (фреймворки/паттерны/SOLID/CQRS/любой другой баззворд) и качественно её проработать вместе с программным комитетом Пыхапа.

А вот ориентировочный список тем для профи:
▸ статический анализ и типизация (написание плагинов/продвинутое использование),
▸ асинхронный PHP (внутрянка/опыт применения),
▸ CI/CD пайплайны для PHP,
▸ немейнстримные БД в проектах на PHP (CockroachDB, Cassandra, YDB, YTsaurus, Clickhouse),
▸ messaging (Kafka, RabbitMQ, NATS, паттерны интеграции),
▸ решение задач с использованием FFI,
▸ нетипичное программирование на PHP (функциональное, кодогенерация),
▸ альтернативные рантаймы (RoadRunner, FrankenPHP, ngx-php),
▸ телеметрия и мониторинг (OpenTelemetry),
▸ организация кода (Vertical Slice Architecture, coupling/cohesion),
▸ любая другая интересная тема, прямо или косвенно связанная с PHP, напишите в комментариях, о чём вы хотели бы рассказать или послушать.

Форма для подачи заявки: https://forms.gle/BtMk4cengNkjeMVh6

Пых

23 Dec, 09:57


Пых pinned «Как стать программистом Мне часто в последнее время задают этот вопрос. Вот мой алгоритм: 1. Задай простой вопрос: "Зачем мне это?" Это основополагающий пункт. Приветствуются ответы вида "очень интересно", "хочу автоматизировать", "хочу написать игру", "хочу…»

Пых

21 Dec, 15:00


PHP-линч #27.1. Как бы я спроектировал Yii3 Data

Залетайте на любую площадку: YouTube, Telegram, VK Видео.
Репозиторий: https://github.com/phpyh/yii3-data.

Комментировать можно прямо под этим постом!

Стрим завершён, всем спасибо за вопросы и донаты. Записи доступны в VK Видео и на YouTube.

Пых

21 Dec, 05:04


PHP-линч #27.1. Как бы я спроектировал Yii3 Data

Ну что ж, встречаемся сегодня вечером в 18:00 по МСК. Кое-что заготовил, но рассуждать и кодить буду с нуля вместе с вами.

Через streamvi.io настроил рестрим и мультичат на три площадки: YouTube, Telegram, VK Видео. Трансляция в 1080p 1440p!

Пых

20 Dec, 17:03


PHP-линч #27.1. Как бы я спроектировал Yii3 Data

Не могу перестать думать про чёртов пакет!

Я не верю в универсальные админки и по-прежнему считаю, что Yii3 Data не особо нужен, но именно поэтому хочу воспользоваться возможностью и попроектировать абстракции такого рода.

Давайте постримимся в эти выходные! Когда вам было бы удобно? А именно в субботу в 18:00.

Пых

19 Dec, 00:07


Как стать программистом

Мне часто в последнее время задают этот вопрос. Вот мой алгоритм:

1. Задай простой вопрос: "Зачем мне это?"
Это основополагающий пункт. Приветствуются ответы вида "очень интересно", "хочу автоматизировать", "хочу написать игру", "хочу сделать сайт". Не советую тебе программировать, если ты подумал про деньги. В любом ремесле нужно искреннее желание, чтобы преодолеть первые несколько тысяч часов. Да и на работу будет труднее устроиться: джуну с горящими глазами я давал шанс, даже когда искал мидла, а пустобрёха-золотоискателя разворачивал даже если он отвечал на все вопросы.

2. Начинай кодить
Прямо после чтения этого поста. Абсолютно не важно, Windows у тебя или MacOS, два монитора или ни одного. Даже если ты читаешь этот пост в 3:07 с телефона, переходи на страницу курса "Введение в программирование" и приступай. Тебе не потребуются ни деньги, ни редактор. Нужно просто нажать кнопку "Начать". Это не реклама, Хекслет — одна из немногих школ, где есть честные бесплатные курсы для начинающих, которые можно пройти прямо в браузере. Идеально для тебя.

3. Продолжай кодить
Если ты не закончил курс из второго пункта, значит, тебе это не надо. Не программировать нормально. Так же нормально, как не управлять самолётом или не играть на трамбоне. Я бы даже сказал, что не программировать нормальнее, чем программировать (спроси мою жену). Но если ты прошёл вводный курс на одном дыхании, можешь взять ещё один, ориентационный, например, "Основы PHP", раз уж ты оказался на канале Пых. Подчёркиваю — тебе для этого не надо бросать учёбу или работу. У тебя и так куча времени, чтобы кодить: проезд, перемены, обеды, вечера, ночи, выходные. И самое главное! Тебе не нужно тратить ни копейки до самого трудоустройства. Я твёрдо уверен, что лучший старт в программировании — самостоятельный.

4. Продолжай кодить
Скорее всего, к этому моменту ты уже придумаешь идею для пет-проекта. Если нет, попробуй автоматизировать любой бытовой процесс, заменив парой скриптов приложение на телефоне. Это может быть список дел, вишлист, учёт финансов, календарь дней рождения, личная страничка в интернете. На этом этапе необходимо взять любую задачу и начать её решать самому, чтобы встретить первые сложности. Все ответы ты найдёшь в интернете: гугли, смотри видео, спрашивай в профильных чатах для джунов и, самое главное, — бесконечно пробуй и переделывай, пока не получится. Делай перерывы — часто ответ приходит в туалете (я серьёзно) или на прогулке.

5. Продолжай кодить
В течение месяца у тебя сформируется свой особенный мирок, в котором ты, к несчастью для близких, будешь пропадать всё чаще и чаще. В нём зародится желание написать тот самый идеальный код. Каждый день ты будешь постигать всё новые способы выразить намерение в программе и многократно переписывать одну и ту же функцию. Ты на верном пути: думай, гугли, рефактори, отлаживай, читай чужой код, проси обратную связь и так по кругу. Этот цикл со временем замедлится, но не прекратится никогда.

6. Не переставая кодить, выходи на рынок труда
Если ты учишься и необходимости в работе нет, лучше доучись или перейди на IT факультет. Я сам по образованию не программист, но рад, что не бросил универ — там меня научили думать. Если ты работаешь, не увольняйся, пока не возьмут, так как поиски могут занять месяцы. Не ври на собеседованиях: претендуй на джуна и реалистичную зарплату, но не соглашайся на что попало. Лучше выбрать проект по душе с достойной командой и низкой стартовой зарплатой, чем условную порностудию с высокомерными людьми и большим окладом. Неудачное собеседование — источник новых знаний, проработав задачи, иди на следующее.

7. Устроился — молодец, продолжай кодить!
Потому что это только начало. Тебе предстоит снова всё переосмыслить, а ещё научиться командной работе: ревью, тесты, легаси, оценка сроков и ответственность. Первый год не бойся переработок и инициативы. Чем больше ты дашь команде, тем больше она вернёт тебе в ответ, не наоборот. Они в тебя поверили — докажи, что не зря.

Удачи! Но будет абсолютно нормально, если ты станешь кем-то ещё.

Пых

17 Dec, 19:46


Друзья, нужна обратная связь. Как вам PHP-линч с автором? Продолжать так делать или чередовать с традиционным форматом?

И вообще расскажите, какой контент от меня хотите. Может быть, есть конкретные темы, которые я мог бы для вас раскрыть. Сейчас вот пришла в голову идея позвать джуна на Open Source Цех, чтобы он, пошарив экран, с моей помощью законтрибьютил что-то полезное. Вам был бы интересен такой стрим?

Спасибо за первые три доната и попытку сделать четвёртый (там что-то с оплатой не задалось)! Пусть на увлажнитель пока не набрали, всё равно очень приятно. 💙

И да, простите за 720p, больше такого не будет.

Пых

16 Dec, 15:42


PHP-линч #27. Yii3 Data c Сергеем Предводителевым

Завтра в 19:30 пройдёт первый линч с участием автора! Сергей Предводителев, разработчик фреймворка Yii3 и герой нескольких PHP-линчей, познакомит меня с новым пакетом Yii Data. По традиции я не заглядывал в код, чтобы поделиться с вами первым впечатлением.

Присоединяйтесь, продолжим изучать Yii3!

https://youtu.be/tVzcnenOAoo

Пых

13 Dec, 11:31


DateTimeImmutable::createFromTimestamp()

В PHP 8.4 Marc Bennewitz добавил метод:


DateTimeImmutable::createFromTimestamp(int|float $timestamp): static


Для DateTime, конечно, тоже, но я не хочу лишний раз упоминать эту мутабельную дрянь.

Используя float, можно создать объект времени с точностью до микросекунд:


$microtime = microtime(as_float: true);

$time = DateTimeImmutable::createFromTimestamp($microtime);

assert(sprintf('%.6f', $microtime) === $time->format('U.u'));


А теперь приятная новость: всё то же самое можно элементарно делать на PHP <8.4! С момента появления DateTimeImmutable в PHP 5.5 его конструктор поддерживает формулу @<timestamp>, а с PHP 7.1 — @<timestamp>[.<µs>] (демо всех вариантов на всех версиях PHP):


$microtime = microtime(as_float: true);
$microtimeAsString = sprintf('%.6f', $microtime); // "1734088458.588154"

$dateTime = new DateTimeImmutable('@' . $microtimeAsString);

assert($microtimeAsString === $dateTime->format('U.u'));


Если часто этим пользуетесь, можете просто добавить себе в проект функцию а-ля PHP 8.4:


function createDateTimeFromTimestamp(int|float $timestamp): DateTimeImmutable
{
return new DateTimeImmutable(sprintf('@%.6f', $timestamp));
}

Пых

12 Dec, 13:07


Оверимплоймент

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

Расскажу про свой "жопыт". Я обычно на 100% погружаюсь в основной проект — остаюсь вечером, чтобы в тишине додумать сложную задачу, или прихожу в выходные бороться с техдолгом. Если проект меня так не драйвит, я меняю работу. Поэтому мне трудно представить, что я пишу код где-то ещё. Тем не менее, два раза пришлось согласиться. В процессе выяснялось, что код кошмарный, а от меня требуется изобразить подход "хуяк-хуяк, и в продакшн". В итоге я зарёкся вписываться в подработки и стал искать другие способы зарабатывать больше.

Очевидно, что работать на двух фулл-таймах мне даже в голову не приходило. Я с круглыми глазами читаю статьи коллег, которые по приколу залетают на 5 работ джунами или на 2-3 сеньорами. С одной стороны, у них крутая самоорганизация, с другой — я не разделяю такой подход к программированию. Пишите в комментариях, пробовали ли вы так делать и чем это закончилось. Ну и заодно давайте поможем NEWHR с их исследованием. В начале года они по результатам опроса сделают лендинг.

https://survey.alchemer.com/s3/7949610/newhr-overemployment-2024

Пых

12 Dec, 09:52


Вчерашний Open Source Цех пошёл на пользу PHP сообществу!

https://youtu.be/z19oWnc4WMU

▸ Sebastian Bergmann закрыл мой тикет про mixed ключи в assertArrayHasXXX() как фикс. Это означает, что изменения будут доступны в патч-апдейтах 10 и 11 версий PHPUnit.

▸ Robin Chalas из команды Symfony согласился, что команда bin/console debug:container <service> должна по умолчанию выводить информацию об аргументах сервиса. Обсуждаем дальше, будет ли изменение вывода нарушением BC или нет. Законтрибьютим с вами решение на следующем стриме Цеха.

▸ По PropertyAccess пока нет обратной связи. Но я уверен, что Nicolas Grekas уже работает над исправлением.

Пых

11 Dec, 08:16


Composer bump-after-update

В Composer 2.8 появилась полезная автоматизация для bump:

# раньше
composer update && composer bump
# теперь
composer update --bump-after-update

# раньше
composer update && composer bump --dev-only
# теперь
composer update --bump-after-update=dev


Или один раз прописываем в composer.json:

{
"config": {
"bump-after-update": true|"dev"|"no-dev"
}
}


В проекте рекомендую использовать true (бампим всё), в библиотеке — "dev" (бампим только dev зависимости), так как диапазоны основных зависимостей библиотеки определяются осознанно в соответствии со стратегией совместимости.

Кто не в курсе, команда composer bump появилась в Composer 2.4. Она поднимает нижние границы констрейнтов в composer.json до зафиксированных в composer.lock, например:

{
"require": {
- "typhoon/reflection": "^0.4"
+ "typhoon/reflection": "^0.4.4"
}
}

Пых

10 Dec, 07:52


Saki Takamachi

Релиз-менеджер PHP 8.4 рассказывает про свой RFC BCMath\Number.

https://youtu.be/ozcgXm1hZBg

Пых

09 Dec, 11:22


Open Source Цех #3. Symfony PropertyInfo, Symfony Console, PHPUnit

В эту среду в 19:00 посмотрим, как Nicolas Grekas поправил совместимость Symfony PropertyInfo с PHP 8.4, и предложим пару маленьких изменений в Symfony Console и PHPUnit.

https://youtu.be/z19oWnc4WMU

Пых

02 Dec, 10:48


PHP Russia 2024

Конфа в самом разгаре! Оба дня до обеда веду зал, а завтра вечером рассказываю про PHP 8.4. Наведу фокус на важные фичи, которым уделили недостаточно внимания.

Кто тут, приходите в зал Кейптаун, буду рад поболтать.

Пых

27 Nov, 15:20


⚡️На момент проведения конференции выйдет долгожданный PHP 8.4 - важнейшее событие для разработчиков. Много новых фич и функций, разобраться в которых будет полезно всем, кому интересен PHP. Об этом расскажут в секции “Новые крутые либы”, представленной на PHP Russia 2024.

Одного выступления для этого мало, но Валентин Удальцов (Typhoon) в cвоем докладе “PHP 8.4: живее всех живых” расставит все основные акценты и расскажет, как поскорее внедрить PHP 8.4 в ваши проекты.

Говорят, что зима близко? Не только зима! Вот-вот выходит легендарный PHP 8.4, набор функционала которого затмевает даже те изменения, что были в PHP 7.4. А значит, самое время вооружиться знаниями о новой версии языка, дабы вся феерия новых возможностей не застала врасплох!

📌 До встречи на PHP Russia 2024, которая пройдет 2 и 3 декабря в рамках HighLoad++ 2024.

📎 Онлайн-билеты, расписание и программу можно найти на сайте

Пых

22 Nov, 12:08


🔫 Иду в гости к Кошачьей Бацыле!

https://youtu.be/9n985wI0z3c

Иван, автор канала, недавно предложил мне вместе постримить. Оказалось, что он пишет на PHP и частенько упоминает его в своих роликах про пресловутое IT. Очевидно, нам есть, о чём поговорить, поэтому я сразу согласился. Залетайте сегодня в 18:00 на уютный пятничный стрим, будем знакомиться!

Пых

18 Nov, 08:07


Четвёртый выпуск "В мире PHP"

https://www.notion.so/PHP-3-1425a7ab4c6c802e88d2ce553b4dd2f3?pvs=4

⬆️ предыдущая часть

#Article #PHP #МыслиВслух

Пых

10 Nov, 17:08


https://wiki.php.net/rfc/function-composition

Заспавнилось на следующий день после доклада. Это квантовая запутанность?

Пых

09 Nov, 23:48


Дизайн php.net освежили. Нравится!

Пых

08 Nov, 15:55


▶️ Пыхап!

Буквально через несколько минут начнётся первый в истории Пыхап! Залетайте в трансляцию на канале PHP Point!

https://youtu.be/Pa4pti6r-rc

В программе у нас 3 доклада:

🤯 (Не) используйте функциональное программирование в PHP
Андрей Клименко поломает вам голову основами ФП и примерами на Scala, из которых станет понятно, что из функционального мира уже доступно в PHP, а что ещё предстоит законтрибьютить.
⬇️Слайды

🐇 Вы не знаете RabbitMQ
Вадим Занфир расскажет, почему все современные фреймворки теряют сообщения и как на самом деле надо работать с "кроликом".
⬇️Слайды

🤑 Как считать деньги и не терять их
В аду есть специальный котёл для тех, кто использует float для хранения денег. Сергей Жук подскажет, как в него не угодить.
⬇️Слайды

Спонсор первого Пыхапа — Happy Job 💚! Обращайтесь в Happy Job за исследованиями вовлечённости и оценкой 360, ребята делают лучшую платформу для развития сотрудников.

Пых

08 Nov, 13:16


🏡 Офлайн Пыхап

Дорогие гости, через два часа, в 18:30, мы будем ждать вас в уютном лофте «Событие» по адресу Москва, Николоямская улица, 28.

Безумно приятно, что некоторые специально приехали издалека, чтобы вживую запустить Пыхап!

О начале онлайн-трансляции я дополнительно объявлю ближе к 19:00.

Пых

07 Nov, 13:38


Пыхап × Happy Job

Пыхап уже завтра, а сегодня я ещё раз хочу поблагодарить Happy Job 💚 за спонсорство. Это далеко не первый наш совместный проект за последние два года. Очень рад, что мы продолжаем тесно общаться на совершенно другом уровне. Пишите в комментариях, у кого были похожие истории.

HR-ы (вы ведь тоже подписаны на Пых?), вам наверняка будет интересен канал @happyjobru в Telegram. Там коллеги периодически проводят бесплатные вебинары и рассказывают про вовлечённость, work-life balance и счастье на работе. Подписывайтесь!

Кстати, накануне я добавил ещё 10 посадочных мест. Почти все раздал, осталось 2 билета, забирайте на странице регистрации!

Пых

06 Nov, 14:00


Open Source Цех #2. Поддержка PHP 8.4 в Symfony PropertyInfo

Сегодня вечером поработаю над своим тикетом в Symfony, который я недавно создал в поддержку письма "Asymmetric visibility is a BC break". Приходите помогать в 19:00 на канал PHP Point. Особенно интересно будет тем, кто ещё не пробовал ассиметричную видимость и виртуальные свойства в PHP 8.4.

https://youtu.be/LjJtb-kFYZg

Пых

06 Nov, 11:50


defer в PHP

В Go есть инструкция defer. Она откладывает выполнение операции на момент после возврата текущей функции:


func main() {
defer fmt.Println("world!")

fmt.Print("Hello ")
}


В PHP мы элементарно добьёмся того же эффекта, если присвоим переменной объект с требуемым кодом в деструкторе. После выполнения скрипта/функции/метода при высвобождении объекта из памяти PHP вызовет этот деструктор:


$defer = new class {
public function __destruct()
{
echo 'world!', PHP_EOL;
}
};

echo 'Hello ';


Каждый раз писать такую колбасу неудобно. Также может потребоваться запланировать несколько defer. Поэтому мы берём на вооружение библиотечку php-defer/php-defer, которая в стиле node_modules предоставляет нам соответствующую функцию:


defer($_, static function (): void {
echo 'rld!', PHP_EOL;
});

defer($_, static function (): void {
echo ', wo';
});

echo 'Hello';


Главный вопрос: зачем это нужно, когда есть finally? Удобство defer состоит в том, что его можно использовать в требуемом месте, не реорганизуя код. Прилагаю скриншот рефакторинга TyphoonReflectorMemoryTest — там всё очень наглядно. Кстати, этот тест я уже упоминал в посте Тест на циклические ссылки.

Cпасибо @Danil42Russia за знакомство с php-defer.

В Laravel тоже есть такая функция, но её не получится использовать вне фреймфорка, спасибо @YourKey и @kafkianskiy.

Пых

05 Nov, 11:52


Пыхап уже в эту пятницу!

Друзья, подготовка к митапу идёт полным ходом! Отслушаны доклады, протестирована трансляция с площадки и забронирован Грузинский ресторан Мзиани для афтерпати. Наверняка в итоге что-то пойдёт не так, но я уверен — даже если выключится свет, мы всё равно отлично проведём время и узнаем кучу нового (см. программу). 😆

Одна маленькая просьба к тем, кто придёт офлайн. Если вы вдруг передумаете, напишите мне до пятницы — я передам ваш билет другим желающим. 😊

До скорой встречи в лофте «Событие» и на канале PHP Point!

Пых

31 Oct, 16:00


▶️ PHP-линч Laravel с Кириллом Мокевниным, Данилом Щуцким и Алексеем Гагариным

Мы начинаем!

https://youtu.be/KpSfWe7XS3A

Пых

30 Oct, 16:10


🍿 Вместо линча сегодня смотрим свою игру от CutCode!

Участники третьего сезона: 🖼 Сергей Предводителев, 🔥 Павел Бучнев и 🖼️ Александр Черняев. Покажите мне сообщество любого другого языка, где есть такие же крутые проекты!

https://youtu.be/Sw2CRO7kTbQ

Начало через 50 минут, не пропустите!

Пых

29 Oct, 14:25


▶️ PHP-линч Laravel с Кириллом Мокевниным, Данилом Щуцким и Алексеем Гагариным

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

▸ Кирилл Мокевнин подсветит проблемы Laravel,
▸ Данил Щуцкий встанет на защиту Тейлора,
▸ Алексей Гагарин расскажет, что в Spiral всё сделано в 100 раз лучше.

Встречаемся в этот четверг в 19:00 по Москве! Жмите в колокол, чтобы не пропустить.

https://youtu.be/KpSfWe7XS3A

Пых

28 Oct, 12:00


Регистрация на Пыхап 8 ноября

https://phpyh.timepad.ru/event/3071538/

Все 50 билетов разлетелись за 15 минут, очень приятно!

Пых

25 Oct, 10:56


Пыхап 8 ноября!

Друзья, ровно через 2 недели пройдёт первый в истории митап от канала Пых! В программе у нас 3 хардкорных доклада:

🤯 (Не) используйте функциональное программирование в PHP
Андрей Клименко поломает вам голову основами ФП и примерами на Scala, из которых станет понятно, что из функционального мира уже доступно в PHP, а что ещё предстоит законтрибьютить.

🐇 Вы не знаете RabbitMQ
Вадим Занфир расскажет, почему все современные фреймворки теряют сообщения и как на самом деле надо работать с "кроликом".

🤑 Как считать деньги и не терять их
В аду есть специальный котёл для тех, кто использует float для хранения денег. Сергей Жук подскажет, как в него не угодить.

Спонсор первого Пыхапа — моя любимая компания Happy Job 💚, где я проработал 4 года! Обращайтесь в Happy Job за исследованиями вовлечённости и оценкой 360, ребята делают лучшую платформу для развития сотрудников.

Пыхап пройдёт в уютном лофте «Событие» на Таганке, начало в 18:30. Вход бесплатный, но по билетам. Регистрация откроется на канале Пых в ближайший понедельник в 15:00, не пропустите. Ну и конечно же митап будет транслироваться на PHP Point с записью.

Пых

23 Oct, 16:03


▶️ PHP-линч #25

Стартуууееем!!!

https://youtu.be/5zw3-K7V_iI

Пых

16 Oct, 18:26


Относительные имена

Если вы вдруг не знали, в PHP можно использовать namespace\, чтобы явно подставить текущий неймспейс в имя. Это альтернатива алиасам при наличии конфликта имён:


namespace Foo;

use Bar\Baz;

echo namespace\Baz; // выведет Foo\Baz


Вот пруф с 3v4l + на линче я подробно показал аналогичный пример. Также рекомендую прочитать статью документации про правила разрешения неймспейсов.

👾 Флешмоб!

Если у вас в ближайшее время возникнет ситуация, когда будет нужно использовать X из текущего неймспейса при наличии импорта X из другого неймспейса, напишите namespace\X вместо рефакторинга на алиас. В комментариях к посту поделитесь, заметили ли коллеги на ревью вашу шалость и пустили ли её в прод.

Пых

16 Oct, 15:01


▶️ PHP-линч #24

Через час линч, не пропусти!

https://youtu.be/WXJNj-b1ONk

Пых

14 Oct, 11:40


Следующая версия PHP — 8.5

Если кто-то вдруг, как и я, полагал, что четвёртый минорный релиз будет последним для PHP 8 (по аналогии с PHP 7), то это не так. В ноябре следующего года ожидается PHP 8.5. Насчёт 9.0 нет никакой информации.

Мне это вчера подсветил Рома Пронский. Пруфы в переписках internals и в свежих RFC:
▸ https://externals.io/message/125667
▸ https://wiki.php.net/rfc/deprecations_php_8_5

Пых

10 Oct, 14:27


▶️ Какое будущее ждёт PHP? Интервью Кириллу Мокевнину

Недавно пообщались с Кириллом Мокевниным, сооснователем школы Хекслет и автором канала Организованное программирование, про наш с вами любимый PHP. Коснулись множества технических и гуманитарных тем от PSR и RoadRunner до экосистемы и сообщества. Надеюсь, вы так же кайфанёте от просмотра, как мы с Кириллом от записи.

https://youtu.be/1XAbFkMaWxw
https://vk.com/video-224967259_456239053
https://podcast.ru/1734325321

Пых

09 Oct, 15:31


▶️ Open Source Цех #1. PHP CS Fixer для new без скобок

На этом стриме мы научимся контрибьютить в Open Source, работать с токенами, писать код по TDD и, конечно, опускать скобки в new выражениях!

Я уже в эфире, присоединяйтесь!

https://youtu.be/8sbJq6b9hNI

Получилось офигенно! Спасибо всем огромное. 💙

Пых

08 Oct, 12:52


▶️ Open Source Цех #1. PHP CS Fixer для new без скобок

Не можешь подступиться к задаче? Сделай из неё инфоповод!

Завтра вместо линча законтрибьютим с вами PHP CS Fixer для моего RFC. Я уже немного разобрался с написанием кастомных фиксеров, но на стриме покажу весь процесс от форка до PR, чтобы получилось полное руководство по предложению изменений в Open Source.

https://youtu.be/8sbJq6b9hNI

Всех жду в 18:30!

Пых

07 Oct, 13:51


🎙 Пых-митап 8 ноября!

Друзья, я задумал провести своими силами митап в Москве!

С меня:
▸ кайфовая площадка на 50 человек в центре города (уже забронирована и оплачена),
▸ бесплатный вход,
▸ трансляция и запись,
▸ пицца.

С вас — крутые доклады. Один уже есть, с него, собственно, всё и началось. Осталось найти ещё два! По ссылке форма для подачи заявки и требования к докладу:

https://forms.gle/HKA6AooDDfG8e6PBA

За пару недель до митапа я опубликую полную информацию о мероприятии и ссылку на онлайн-регистрацию. Пока просто пометьте в календаре, что вечер пятницы 8 ноября у вас занят. 😉

До встречи в оффлайне!

Пых

04 Oct, 16:09


Могу!

https://code.golf/golfers/vudaltsov/fizz-buzz/php/bytes

Пых

04 Oct, 09:47


Ну это, фартаны, известный прикол. А как вы думаете, почему такой код работает?


<?php

echo b'Пых';


https://3v4l.org/D40FF

Пых

04 Oct, 09:47


Как вы думаете? Почему этот код рабочий?

<?php

https://temporal.io
echo 'Hello, World!';


Вот ссылка, можете проверить
https://3v4l.org/WZBGM

Пых

03 Oct, 17:05


В последний момент исправляю рефлексию в PHP 8.4!

На неделе я начал добавлять поддержку PHP 8.4 в Typhoon Reflection, и очень рад, что взялся за это до релиза.

Во-первых, я зарепортил отсутствие обещанной в RFC хуков константы ReflectionProperty::IS_VIRTUAL. Но это тривиально, PR уже готов.

А вот что меня реально загрузило, так это поведение новых методов ReflectionProperty::isPrivateSet() и isProtectedSet() из Asymmetric Visibility RFC. Посудите сами:


final class Foo
{
// isPrivateSet() = true 👌
public private(set) mixed $public_private_set;

// isPrivateSet() = false 🤯
private private(set) mixed $private_private_set;

// isPrivateSet() = false 🤯
private mixed $private;

// isProtectedSet() = true 👌
public readonly mixed $public_readonly;

// isProtectedSet() = false 🤯
protected readonly mixed $protected_readonly;

// isProtectedSet() = false 🤯
protected protected(set) readonly mixed $protected_protected_set_readonly;

// isPrivateSet() = false 👌, isProtectedSet() = false 👌
public bool $virtual_no_set_hook { get => true; }
}


Сначала я подумал, что это баг, и создал тикет php-src#16175. Ilija, автор RFC, объяснил, почему так работает. Дело в том, что у свойств с симметричной видимостью отсутствует флаг ассиметричности. Поэтому для private и private private(set) isPrivateSet() возвращают false, а не true, как было бы логично ожидать. readonly свойства без явного (set) под капотом получают protected (set) (см. "Relationship with readonly" в RFC), поэтому public readonly будет ассиметричным с isProtectedSet() = true, а protected readonly — симметричным с isProtectedSet() = false.

Стало понятно, вот только пользоваться такой рефлексией по-прежнему дико неудобно. В API протекли детали реализации, которые, наоборот, должны быть инкапсулированы. Задача рефлексии — предоставить пользователю комфортный способ изучать код, а не продемонстрировать подкапотное устройство языка.

Но это ещё ладно. Сегодня до меня дошло, что в текущем виде рефлексия в PHP 8.4 ломает обратную совместимость! Если раньше проверка $reflectionProperty->isPublic() гарантировала, что не readonly свойства доступны на запись и чтение из глобального скоупа, то при текущей реализации в 8.4 она будет гарантировать только чтение!


$reflectionProperty = new ReflectionProperty($class, $property);

if ($reflectionProperty->isPublic() && !$reflectionProperty->isReadonly()) {
$object->{$property} = $value;
}


Например, такой код корректно отработает для любых классов в PHP 8.3, но споткнётся на public private(set) $property в 8.4, потому что isPublic() вернёт true, а запись в свойство бросит ошибку.

Вот что я предложил в письме к internals, которое составил в Сапсане по дороге на Live PHP:

ReflectionProperty::isPublic(), isProtected() и isPrivate() должны сохранить своё поведение и возвращать true только если свойство симметричное. Для public readonly метод будет возвращать false, потому что под капотом оно асимметричное с protected(set). Да, это сломает обратную совместимость, но не так критично, потому что все библиотеки уже учитывают тот факт, что в readonly нельзя писать из глобального скоупа.
• Добавить ReflectionProperty::isPublicGet(), isProtectedGet() и isPrivateGet(). Они должны возвращать true, если свойство симметрично или асимметрично доступно на чтение.
• Добавить ReflectionProperty::isPublicSet() и поменять поведение isProtectedSet() и isPrivateSet(): они должны возвращать true, если свойство симметрично или асимметрично доступно на запись.

Вся проблема в том, что недавно вышел PHP 8.4 RC1, и вносить изменения уже поздно. Надеюсь, что мой посыл про нарушение обратной совместимости всё-таки убедит сделать исключение.

Пых

02 Oct, 07:12


▶️ PHP-линч #23

Как и обещал, буду стараться делать линчи по средам. Сегодня предлагаю встретиться пораньше, в 18:00, чтобы вы успели на Podlodka.

https://youtu.be/FYVfQk0-t3U

Пых

30 Sep, 12:51


Live PHP meetup 3 октября

В этот четверг в Санкт-Петербурге пройдёт очередной Live PHP. Вот мои ожидания от докладов.

GIGA IDE Cloud - сверхновая IDE во вселенной веб-разработки. Хочу послушать из первых уст про успехи Сбера на поприще IDE. Пора искать замену PhpStorm.
Transaction Script и Transaction Outbox в PHP: Эффективные паттерны для управления транзакциями. В моей картине мира Transaction Script и Transaction Outbox — это как гранатовый сок и гранатовый браслет. Интересно узнать, как Станислав уместил две ортогональные концепции в один доклад.
Страх и ненависть PSR. Недавно с Кириллом Мокевниным (интервью выйдет в октябре) обсуждали, что, несмотря на все проблемы, PHP всё-таки смог в стандарты в отличие от многих других языков. Качественный наброс от Кирилла Несмеянова будет очень кстати. С нетерпением жду!
Как растут проекты. Дима Елисеев, с удовольствием послушаю любые твои мысли, только, пожалуйста, не затягивай. 🙏

Короче, я взял билеты на Сапсан 🚝, и в четверг в 18:30 буду как штык в IT-баре Failover.

https://t.me/live_php_news/27

Пых

25 Sep, 08:23


Podlodka PHP Crew «Практическая архитектура»

На следующей неделе стартует пятая Podlodka PHP. Программа:

• Упорядочиваем хаос: архитектурная документация по модели C4 / Кирилл Сурогатов
• Как стать x2 разработчиком, используя явное состояние / Кирилл Мокевнин
• Нам уже нужен CQRS? А теперь? / 💙 Валентин Удальцов
• PHP + Prometheus: Работа с кастомными метриками / Алексей Солодкий
• RabbitMQ vs Kafka: обрабатываем большие объёмы / Михаил Каморин
• Построение качественных банковских интеграций на PHP / Дмитрий Кириллов
• PHP будет долго жить: переезжаем на Roadrunner / Владимир Плахотников
• Нет ничего более постоянного, чем Temporal / 🔥 Павел Бучнев, Алексей Гагарин
• Перевозим приложение на PHP в Kubernetes / Вадим Дворовенко

Сегодня последний шанс купить билет по сниженной цене. По промокоду phpyh5 можно получить дополнительную скидку 500 руб.

https://podlodka.io/phpcrew

Пых

23 Sep, 10:23


▶️ PHP-линч #22

Пора возобновить наши встречи! Жду всех в эту среду в 18:30 по Москве.

Одна заявка на линч у меня уже есть от Сергея Предводителева: vjik/telegram-bot-api. Пишите в комментариях, что ещё хотите посмотреть.

https://youtu.be/zuGtL5u2lsY