TGViewer
Channel Public Channel
Пых

Пых

@phpyh

Блог Валентина Удальцова о разработке на PHP.

Хобот @phpyhobot
https://youtube.com/@phpyh
https://vkvideo.ru/@phpyh
https://t.me/isPHPdying

Статистика: https://t.me/INOTAROBOT?start=st1219340804

Для связи используйте личные сообщения канала.
Subscribers
7.87K
Photos
285
Videos
20
Links
627

Showing posts older than #930 · Back to latest

Older Posts 19 shown
Post #929 6.94K
Пых PHP-линч #30 через час! Чуть позже здесь будут ссылки на трансляции. Сегодня снова не Yii3, потому что забыл заанонсить заранее. 😭
PHP-линч #30

📹 YouTube 📹 VK Видео

Сначал долго разогревались, но потом стали смотреть Feolius/hell2shape.

Вспомнили лексеры/парсеры, заюзали typhoon/type и законтрибьютили в hell2shape поддержку свойств с пустым именем. Вышло очень интересно.

Код с линчей теперь в репозитории phpyh/lynch.

#php_линч
  • ❤ 8
  • 👍 4
  • 🔥 2
Post #928 5.37K
PHP-линч #30 через час!

Чуть позже здесь будут ссылки на трансляции.

Сегодня снова не Yii3, потому что забыл заанонсить заранее. 😭
  • 🔥 12
  • 👍 7
  • 💩 3
  • 😱 2
Post #927 6.12K
  • 👍 10
  • 🔥 6
  • 🤩 3
  • ❤ 1
Post #926 7.89K
Пых Сегодня наконец-то PHP-линч #29! Я открываю новый сезон знаменитой рубрики PHP-линч! Сам по ней невероятно соскучился. Хотелось бы сразу посмотреть на Yii3, но лучше мы в этот раз разогреемся чем-то поменьше, а, например, в следующую среду весь стрим посвятим…
PHP-линч #29 в эфире!

Залетайте на 📹 YouTube и 📹 VK Видео.
VK Видео PHP-линч #29: symfony/object-mapper Как устроен PHP-линч: 1. Во время стрима вы скидываете в чат трансляции ссылки на репозитории и в трёх словах описываете, что там. Это может быть ваш пет-проект или библиотека, а может быть компонент (не)известного фреймворка. 2. Я выбираю проект. 3. Клонирую…
  • 🔥 10
  • ❤ 6
  • 👍 5
Post #925 9.21K
Сегодня наконец-то PHP-линч #29!

Я открываю новый сезон знаменитой рубрики PHP-линч! Сам по ней невероятно соскучился.

Хотелось бы сразу посмотреть на Yii3, но лучше мы в этот раз разогреемся чем-то поменьше, а, например, в следующую среду весь стрим посвятим Yii.

Залетайте в 19:00 на 📹 YouTube и 📹 VK Видео.

#php_линч
VK Видео PHP-линч #29: symfony/object-mapper Как устроен PHP-линч: 1. Во время стрима вы скидываете в чат трансляции ссылки на репозитории и в трёх словах описываете, что там. Это может быть ваш пет-проект или библиотека, а может быть компонент (не)известного фреймворка. 2. Я выбираю проект. 3. Клонирую…
  • 🔥 31
  • 👍 9
  • ❤ 7
Post #924 6.14K
Пых Знакомство с новыми авторами PHPeople У меня в офисе наконец-то появился проводной интернет, и я запускаю сезон стримов на Пыхе! Для начала сегодня в 19:00 встретимся с новыми авторами PHPeople: • Александр Макаров — всемирно известный лидер команды Yii…
Знакомство с новыми авторами PHPeople

Мы уже в эфире!

📹 YouTube | 📹 VK Видео | 🐘 PHPeople
YouTube Знакомство с новыми авторами PHPeople Новые авторы и тариф в PHPeople 1. У нас пополнение! К нам присоединились пять новых экспертов: • Александр Макаров — всемирно известный лидер команды Yii. • Петр Мязин — автор Пятиминутки, перешёл с PHP на ИИ. • Павел Бучнев — фартанист и вайб-кодер. •…
  • 🔥 14
  • 🤡 4
  • 👍 3
  • ❤ 2
  • 🤮 2
  • 😁 1
Post #923 5.37K
Знакомство с новыми авторами PHPeople

У меня в офисе наконец-то появился проводной интернет, и я запускаю сезон стримов на Пыхе!

Для начала сегодня в 19:00 встретимся с новыми авторами PHPeople:

Александр Макаров — всемирно известный лидер команды Yii,
Пётр Мязин — автор Пятиминутки, перешёл с PHP на ИИ,
Павла Бучнев — фартанист и вайб-кодер,
Вадим Дворовенко — знает Laravel как Тейлор, но ещё не лысый,
Edmond Dantes — разрабатывает асинхронный PHP будущего.

Чуть позже объявлю, когда будет первый PHP-линч и Open Source Цех.

📹 YouTube | 📹 VK Видео | 🐘 PHPeople
YouTube Знакомство с новыми авторами PHPeople Новые авторы и тариф в PHPeople 1. У нас пополнение! К нам присоединились пять новых экспертов: • Александр Макаров — всемирно известный лидер команды Yii. • Петр Мязин — автор Пятиминутки, перешёл с PHP на ИИ. • Павел Бучнев — фартанист и вайб-кодер. •…
  • 🔥 30
  • 👍 13
  • ❤ 12
  • 😁 3
  • 🤮 1
Post #922 6.86K
Пых 🗺️ ClassMap: типизируем опции, конфиги, атрибуты Новая лекция в Пых Лектории про паттерн ClassMap — расширяемый и типобезопасный способ передачи конфигурации между компонентами. План лекции: • берём популярную библиотеку Symfony и находим три проблемы, связанные…
🗺️ ClassMap: типизируем опции, конфиги, атрибуты

Друзья, я осознал, что из тизера и описания многие не поняли, о чём моя новая лекция.

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

📹 YouTube | 📹 VK Видео | 💙 Лекция целиком
YouTube ClassMap: типизируем опции, конфиги, атрибуты — Анонс лекции Пых Лектория Полная версия лекции в Хоботе: https://t.me/phpyhobot 0:00 План лекции 0:26 Устройство Symfony Serializer 3:24 Проблема 1: непонятно, что передавать в контекст 5:14 Проблема 2: контекст нельзя проверить статически 7:00 Проблема 3: неудобно имплементировать…
  • 👍 27
  • ❤ 7
  • 🔥 7
  • 💊 4
  • 🤮 3
  • 🤡 3
  • 💩 2
Post #920 6.36K
🗺️ ClassMap: типизируем опции, конфиги, атрибуты

Новая лекция в Пых Лектории про паттерн ClassMap — расширяемый и типобезопасный способ передачи конфигурации между компонентами.

План лекции:
• берём популярную библиотеку Symfony и находим три проблемы, связанные с передачей нетипизированных опций,
• обсуждаем неоптимальные подходы,
• изучаем паттерн ClassMap,
• применяем его и получаем исчерпывающее решение,
• анализируем плюсы и минусы паттерна ClassMap.

Также лекция затрагивает следующие темы:
• проектирование расширяемых ООП-компонентов,
• иммутабельность,
• дженерики,
• клонирование в PHP 8.5.

Залетай в Хобота, чтобы посмотреть!

50 минут / 1000 рублей
  • 💊 34
  • 👍 25
  • 🔥 13
  • ❤ 5
  • ✍ 4
  • 🤮 4
  • 🤡 4
  • 💩 3
  • 👏 2
  • 🤯 2
  • 👎 1
Post #919 6.04K
Переменные среды в Docker Compose

Разобравшись с переменными уровня хоста, мы готовы обсудить второй уровень.

2. Переменные Docker-сервиса

По умолчанию сервис не получает никакие переменные среды с хоста. Мы можем их прокинуть, используя ключи environment и env_file.

environment можно оформить как объект:


php:
environment:
DB_HOST: postgres
STORAGE_PATH: ${STORAGE_PATH}


или как массив:


php:
environment:
- DB_HOST=postgres
- STORAGE_PATH=${STORAGE_PATH}


Тут возникает интересный момент со значениями по умолчанию. Допустим, в контейнере крутится приложение на Symfony, которое обрабатывает отсуствие переменной среды STORAGE_PATH с использованием процессоров:


$di->parameters()
->set(
'storage.default_path',
'%kernel.project_dir%/var/storage/%kernel.environment%',
);

$di->services()
->set(Storage::class)
->args([
'path' => env('STORAGE_PATH')
->default('storage.default_path')
]);


Если в compose.yaml прописать STORAGE_PATH=${STORAGE_PATH:?/app/var/storage/dev}, это будет не то же самое. Без значения по умолчанию тоже нельзя оставить переменную, иначе Docker выдаст предупреждение и присвоит переменной пустую строку.

Решение, конечно же, есть в документации, но его легко не заметить:

Environment variables can be declared by a single key (no value to equals sign). In this case Compose relies on you to resolve the value. If the value is not resolved, the variable is unset and is removed from the service container environment.



php:
environment:
- STORAGE_PATH: ${STORAGE_PATH}
+ STORAGE_PATH:


или


php:
environment:
- - STORAGE_PATH=${STORAGE_PATH}
+ - STORAGE_PATH


По сути, это самый верный и простой способ прокинуть переменные среды с хоста в контейнер "как есть".

У env_file тоже есть несколько интересных нюансов. Например, начиная с Docker 2.24.0, можно объявлять необязательные файлы:


php:
env_file:
- path: .env # required by default
- path: .env.local
required: false


Сами env файлы по умолчанию парсятся в формате Docker: с интерполяцией ${}, двумя вариантами синтаксиса (: и =) и экранированием. Это можно выключить, задав файлу format: raw.

В будущем обсудим, как укротить всю эту нереальную гибкость и выработать best practice.

📁 Документация по environment
📁 Документация по env_file

🐘 Кстати, этот пост я опубликовал в PHPeople ещё в прошлом году, присоединяйся!
  • 👍 37
  • ❤ 14
  • 🤡 7
  • 🔥 6
Post #918 5.23K
Переменные среды в Docker Compose

Основной момент, который важно понять, — в docker compose есть два уровня работы с переменными среды.

1. Переменные хоста

Первый уровень — это переменные хоста. Их можно интерполировать в compose.yaml (бывший docker-compose.yml), например:


services:
php:
image: php:${PHP_VERSION}-cli-bookworm


Если запустить docker compose up без PHP_VERSION в среде, получим предупреждение, что такой переменной нет и была использована пустая строка. Дальше, конечно, ошибка: php:-cli-bookworm не является корректной ссылкой на образ.

На уровне синтаксиса тут есть два основных варианта:


# задать значение по умолчанию
image: php:${PHP_VERSION:-8.5}-cli-bookworm

# или превратить предупреждение в ошибку с кастомным текстом
image: php:${PHP_VERSION:?Env variable `PHP_VERSION` is required}-cli-bookworm


Также на этом уровне можно использовать .env файлы. По умолчанию docker compose ищет .env в текущей директории (pwd), затем в директории проекта (где compose.yaml).

Можно явно указать несколько своих .env файлов. Пример с классической схемой .env.local > .env, для отладки используем docker compose config --environment:


echo 'PHP_VERSION=8.4' > .env
echo 'PHP_VERSION=8.5' > .env.local

docker compose --env-file .env \
--env-file .env.local \
config --environment | grep PHP_VERSION

# выведет PHP_VERSION=8.5


Самый высокий приоритет всегда будет у реальных переменных среды:


export PHP_VERSION=8.6

docker compose --env-file .env \
--env-file .env.local \
config --environment | grep PHP_VERSION

# выведет PHP_VERSION=8.6


Про второй уровень, уровень контейнера, расскажу в следующем посте.

📁 Set, use, and manage variables in a Compose file with interpolation
📁 Environment variables precedence in Docker Compose

🐘 Кстати, этот пост я опубликовал в PHPeople ещё в прошлом году, присоединяйся!
  • 👍 63
  • 🔥 15
  • ❤ 9
  • 🤡 5
Post #916 7.19K
Post #914 9.94K
Стартовал ежегодный опрос!

С 2020 года лидеры русскоязычного PHP-сообщества проводят опрос. Так мы получаем портрет нашей аудитории и понимаем, на чём фокусироваться в новом году.

В этот раз эстафету от CutCode приняла питерская команда Live PHP, пожелаем ребятам удачи с вёрсткой итогов!

➡️ Пройти опрос

Опрос анонимный, но если оставить свою почту, можно поучаствовать в розыгрыше слоника 💙Пых.

Итоги, как обычно, будут опубликованы на phpcommunity.ru.
  • 👍 25
  • 🔥 15
  • 🥱 3
  • ✍ 1
  • ❤ 1
Post #913 7.56K
Post #912 7.21K
Итоги 2025 года

Оглядываясь назад, я понимаю, что это был насыщеный, сложный, во многом спонтанный и экспериментальный год.

Спасибо всем за участие во всём, что я делаю! То ли ещё будет. 🐘

Мероприятия
Пыхап #2 × PremiumBonus
Пыхап #3 × YCLIENTS
Пыхап #4 × Lamoda Tech
Пых.конф’25
Пыхап #5 × LivePHP × Garage Eight

Основные стримы
Кодим с джуном / Евгений Alignant, cпецификации и SQL
PHP True Async: обсуждаем RFC с автором
Pipe-оператор и $$ в PHP с Андреем Клименко
Дженерики в PHP: быть или не быть? с Андреем Клименко
OR: PHP vs GO

Образование
• 5-й поток Хардкорного курса
• Лекция MessageBus
• Лекция Спаси свой репозиторий от save()

Релизы
New без скобок в PHP-CS-Fixer
Thesis Amqp
Thesis Nats

Доклады
Кто отправит outbox? на Пыхапе #4
PHP сегодня на Пых.конф’25
PHP 8.5 не сбавляет темп! на Стачке

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

PHPeople
Вместе с Данилом Щуцким запустили платформу для PHP-сообщества. На днях мы добавили ещё 5 авторов, скоро анонсируем.

Пишите в комментариях, что вам больше всего запомнилось и понравилось, чего не хватило и чего ждёте от Пыха в 2026.
  • 🔥 58
  • 👍 20
  • 👏 6
  • ❤ 5
  • 🤡 3
Post #910 7.77K
С новым годом, дорогие подписчики! ❤️
  • ❤ 168
  • 🎉 86
  • 🍾 22
  • 🎄 16
  • 👍 6
  • 🔥 5
  • ❤‍🔥 3
  • 💩 2
  • 🤡 2
  • 💊 1
Post #909 10.8K
Пых Презентация PHPeople Завтра в 19 стрим PHPeople с авторами! Расскажем про проект, ответим на вопросы. Всех ждём! https://youtu.be/dwK6YFkgQBY https://vkvideo.ru/video-228746873_456239125
Презентация PHPeople

Через 15 минут стрим PHPeople с авторами! Расскажем про проект, ответим на вопросы.

Всех ждём!

https://youtu.be/dwK6YFkgQBY
https://vkvideo.ru/video-228746873_456239125
  • 👍 16
  • 🤡 12
  • 💩 5
  • 🔥 3
  • ❤ 2
Post #908 8.5K
fnmatch

Ты когда-нибудь слышал про такую функцию? Я — нет, недавно случайно её встретил в коде Infection.

По сути, это glob для строковых путей.


fnmatch(string $pattern, string $filename, int $flags = 0): bool


Грамматика шаблона:
? совпадает с одним символом,
* совпадает с пустой строкой или несколькими символами,
[] определяет набор или диапазон ASCII символов ([0-9], [0-9a-zABC]),
! используется для отрицания внутри [],
\ экранирует спецсимволы.

Важный флаг — FNM_PATHNAME. Он запрещает ?, *, [] совпадать со слешом.


dump(
fnmatch('*/index.php', 'a/b/c/index.php'), // true
fnmatch('*/index.php', 'a/b/c/index.php', FNM_PATHNAME), // false
fnmatch('*/index.php', 'a/index.php', FNM_PATHNAME), // true
);


📁https://www.php.net/manual/ru/function.fnmatch.php

Этот пост был доступен месяц назад в PHPeople
  • 👍 27
  • 👀 10
  • ❤ 6
  • 🤔 3
  • 🤡 2
  • 🔥 1
  • 😱 1
  • 💩 1
  • 🙏 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →