В PHP 8.5 наконец-то будет clone with!
Как-то незаметно в PHP 8.5 приняли долгожданный RFC https://wiki.php.net/rfc/clone_with_v2.
1. Клонирование теперь не только языковая конструкция, но и функция
2. Вторым аргументом можно передать новые значения свойств для склонированного экземпляра. Переопределить можно любые видимые в текущей области свойства, в том числе
Почему это важная фича и как без неё обходиться прямо сейчас, подробно рассказал Brent Roose в ролике📹 Cloning Readonly Classes in PHP 8.2.
____________
До конца завтрашнего дня билеты на Пых.конф’25 всего по 12 000 рублей!
Как-то незаметно в PHP 8.5 приняли долгожданный RFC https://wiki.php.net/rfc/clone_with_v2.
1. Клонирование теперь не только языковая конструкция, но и функция
clone(object $object, array $withProperties = []): object
. Благодаря этому можно писать array_map(clone(...), $myObjects)
.2. Вторым аргументом можно передать новые значения свойств для склонированного экземпляра. Переопределить можно любые видимые в текущей области свойства, в том числе
readonly
, что наконец-то даёт нам полный инструментарий для работы с иммутабельными структурами:
final readonly class Request
{
public function __construct(
public string $path = '',
public array $headers = [],
) {}
public function withPath(string $path): self
{
return clone($this, ['path' => $path]);
}
public function withHeader(string $name, string $value): self
{
return clone($this, ['headers' => [
...$this->headers,
$name => $value,
]]);
}
}
new Request()
->withPath('/phpyh')
->withHeader('Content-Type', 'application/json');
Почему это важная фича и как без неё обходиться прямо сейчас, подробно рассказал Brent Roose в ролике
____________
До конца завтрашнего дня билеты на Пых.конф’25 всего по 12 000 рублей!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍31❤7🤯7🤔1
ProIT Fest V 5-6 июля
После Saint Highload++ я оказался на афтепати, где познакомился с Анной Афониной. Она мне дала несколько ценных советов по организации Пых.конф и рассказала про свои ивенты. Анна много лет делает крутые интерактивные IT-фестивали в Санкт-Петербурге в неожиданных локациях с нестандартными форматами для всех, кто живёт в IT от Middle до C-Level.
Ближайший — ProIT Fest V 5-6 июля в Ленполиграфмаше. Вот несколько секций, которые мне показались интересными для нас, пыхарей:
📚 #КодаКода: База знаний тимлида для качественного погружения в процессы
Про построение личной базы знаний и структурирование информации для улучшения командных процессов.
🤖 Круглый стол: Доавтоматизировались
Об опасностях чрезмерной автоматизации и обоснованном выборе инструментов.
⚔️ Code Battle
Соревнование по решению алгоритмических задач в Telegram-чате с юмором и призами.
🎲 Featureban
Деловая игра, в которой участники разбиваются на несколько команд, чтобы вместе разрабатывать продукт и решать проблемы синхронизации межкомандной работы на практике.
🧼 Круглый стол: Базовая гигиена
О минимально необходимых инженерных практиках в инфраструктуре, безопасности и контроле доступа с реальными кейсами от DevOps/SRE специалистов.
@proitfest | Билеты, -20% по промокоду
Реклама. ИП Афонина А.Г. ИНН 781137236664. erid: 2VtzqxXaEaS
После Saint Highload++ я оказался на афтепати, где познакомился с Анной Афониной. Она мне дала несколько ценных советов по организации Пых.конф и рассказала про свои ивенты. Анна много лет делает крутые интерактивные IT-фестивали в Санкт-Петербурге в неожиданных локациях с нестандартными форматами для всех, кто живёт в IT от Middle до C-Level.
Ближайший — ProIT Fest V 5-6 июля в Ленполиграфмаше. Вот несколько секций, которые мне показались интересными для нас, пыхарей:
📚 #КодаКода: База знаний тимлида для качественного погружения в процессы
Про построение личной базы знаний и структурирование информации для улучшения командных процессов.
🤖 Круглый стол: Доавтоматизировались
Об опасностях чрезмерной автоматизации и обоснованном выборе инструментов.
⚔️ Code Battle
Соревнование по решению алгоритмических задач в Telegram-чате с юмором и призами.
🎲 Featureban
Деловая игра, в которой участники разбиваются на несколько команд, чтобы вместе разрабатывать продукт и решать проблемы синхронизации межкомандной работы на практике.
🧼 Круглый стол: Базовая гигиена
О минимально необходимых инженерных практиках в инфраструктуре, безопасности и контроле доступа с реальными кейсами от DevOps/SRE специалистов.
@proitfest | Билеты, -20% по промокоду
phpyh
Реклама. ИП Афонина А.Г. ИНН 781137236664. erid: 2VtzqxXaEaS
👍14🔥9❤5🤮1🥱1🐳1🆒1
Пых
Пыхап #4 × Lamoda Tech. Конкурс факапов У нас набралось 18 факапов (Хобот + эксперты + зал + чат трансляции): https://telegra.ph/Pyhap-4--Lamoda-Tech-Konkurs-fakapov-06-21 Ниже два опроса, выбирай в них все понравившиеся факапы. В понедельник в 18:00 по…
Итоги конкурса факапов!
Тройка победителей:
🥇 Алексей Солодкий «phpMyLogin» (YouTube, VK Видео) — 74 голоса,
🥈 Никита Койдо «Тест-рассылка 18+» — 63 голоса,
🥉 Олег Мифле «Уверенность, стирающая товары» (YouTube, VK Видео) — 55 голосов.
👏 И я решил дополнительно наградить Максима Божко за три крутые истории: «Слэш судьбы», «Генdick» и «Финальный статус». Суммарно они набрали 135 голосов!
Все четверо получают бесплатные проходки на Пых.конф’25, а Алексей ещё и слоника Пых. Всем спасибо за истории и участие в голосовании!
____________
Кстати, про слоников. Недавно на planeta.ru опубликовал статус проекта. Вкратце, всё по плану, партия приедет ко мне в начале июля.
Тройка победителей:
Все четверо получают бесплатные проходки на Пых.конф’25, а Алексей ещё и слоника Пых. Всем спасибо за истории и участие в голосовании!
____________
Кстати, про слоников. Недавно на planeta.ru опубликовал статус проекта. Вкратце, всё по плану, партия приедет ко мне в начале июля.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥6🎉6❤3😁1
Forwarded from Пых.конф’25 — главное PHP-событие этого года!
Заканчиваем приём заявок на доклады
Завтра в 18:00 мы закроем подачу заявок на доклады на Пых.конф’25. Если у тебя есть идея для выступления — самое время закинуть её в Хобота! Мы рассматриваем все тезисы и помогаем с их доработкой.
Пожалуйста, перешли это сообщение в чат коллегам, вдруг они не знали.
Завтра в 18:00 мы закроем подачу заявок на доклады на Пых.конф’25. Если у тебя есть идея для выступления — самое время закинуть её в Хобота! Мы рассматриваем все тезисы и помогаем с их доработкой.
Пожалуйста, перешли это сообщение в чат коллегам, вдруг они не знали.
conf.phpyh.ru
Пых.конф’25
Новая PHP-конференция для всех
🔥10👍6👌3
Опциональный $column_key в array_column
Я довольно часто использую
И с тех пор, как у нас появились именованные аргументы, очень хочется писать короче:
Прямо сейчас у меня так много всяких организаторских дел, что я готов себе позволить отвлечься только на что-то очень полезное и нестандартное, чтобы качественно переключиться. И вот только что, буквально за 10 минут, состряпал простейший PR, который делает
____________
Вчера мне скинули видео готового слоника Пых, и я оплатил вторую половину счёта. Так что сегодня-завтра вся партия отправится в Москву транспортной компанией! Готовьте свои СДЕКи😉
Я довольно часто использую
array_column
для индексации объектов и ассоциативных массивов по публичному свойству/ключу:
final readonly class Article
{
public function __construct(
public string $articleId,
public string $title,
) {}
}
array_column(
array: [
new Article(Ramsey\Uuid\v7(), 'Люблю PHP'),
new Article(Ramsey\Uuid\v7(), 'Безразличен к Go'),
new Article(Ramsey\Uuid\v7(), 'Уважаю Scala'),
],
column_key: null,
index_key: 'articleId',
);
И с тех пор, как у нас появились именованные аргументы, очень хочется писать короче:
array_column($articles, index_key: 'articleId')
. А нельзя, потому что второй параметр $column_key
обязательный.Прямо сейчас у меня так много всяких организаторских дел, что я готов себе позволить отвлечься только на что-то очень полезное и нестандартное, чтобы качественно переключиться. И вот только что, буквально за 10 минут, состряпал простейший PR, который делает
$column_key
опциональным. Надеялся, что такое просто смержат после ревью, но уважаемый мейнтейнер Tim Düsterhus порекомендовал обсудить это изменение в internals. Что ж, письмо будет следующим отвлечением! А вы пока накиньте там лайков, пожалуйста.____________
Вчера мне скинули видео готового слоника Пых, и я оплатил вторую половину счёта. Так что сегодня-завтра вся партия отправится в Москву транспортной компанией! Готовьте свои СДЕКи
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Make parameter $column_key optional in array_column() by vudaltsov · Pull Request #18994 · php/php-src
Quite often in my code I reindex object collections via array_column. However, I have to explicitly pass null to $column_key instead of skipping it. Here's a change that makes possible this...
👍28❤25🔥15👏1
В PHP-CS-Fixer смержили мой фиксер new_expression_parentheses!
Позавчера состоялся релиз v3.76.0 Kids Playground, куда наконец-то попал фиксер
Вот как включить это правило в
Мейнтейнер Dariusz Rumiński предлагает добавить
____________
1. Слоники Пых выехали ко мне из Иркутска, транспортная компания обещает доставить в Москву в течение 9 дней. Жду!
2. Мы вчера с программным комитетом Пых.конф’25 зафиналили на встрече мощнейшую программу. Скоро вывесим на сайт.
Позавчера состоялся релиз v3.76.0 Kids Playground, куда наконец-то попал фиксер
new_expression_parentheses
, который мы делали в Open Source цеху (#1, #4). Он убирает скобки вокруг new
выражений в соответствии с RFC new without parentheses в PHP 8.4.Вот как включить это правило в
.php-cs-fixer.dist.php
после обновления:
return new Config()
// разрешаем PHP-CS-Fixer работать на 8.4,
// это вместо переменной среды PHP_CS_FIXER_IGNORE_ENV
->setUnsupportedPhpVersionAllowed(true)
// включаем параллельную обработку файлов
->setParallelConfig(ParallelConfigFactory::detect())
// по умолчанию finder ищет только *.php
// и игнорит директории vendor и .* (.git, .idea, ...)
->setFinder(Finder::create()->in(__DIR__))
->setRules([
// ...
'new_expression_parentheses' => [
// убираем ненужные скобки
'use_parentheses' => false,
],
]);
Мейнтейнер Dariusz Rumiński предлагает добавить
new_expression_parentheses
в сет @PHP84Migration
. Накидайте там лайков, пожалуйста. @open_source_php, кажется, у нас есть задачка для подписчиков. 😊____________
1. Слоники Пых выехали ко мне из Иркутска, транспортная компания обещает доставить в Москву в течение 9 дней. Жду!
2. Мы вчера с программным комитетом Пых.конф’25 зафиналили на встрече мощнейшую программу. Скоро вывесим на сайт.
🔥57❤10👨💻2🤷2🦄1
Пых
Пыхап #4 × Lamoda Tech. Конкурс факапов У нас набралось 18 факапов (Хобот + эксперты + зал + чат трансляции): https://telegra.ph/Pyhap-4--Lamoda-Tech-Konkurs-fakapov-06-21 Ниже два опроса, выбирай в них все понравившиеся факапы. В понедельник в 18:00 по…
Пыхап #4 × Lamoda Tech. Записи и фотки
Мы выложили отдельными роликами доклады, спасибо @whiskey_code за монтаж.
👁 Observability в PHP без боли — Олег Мифле, Altenar
YouTube | VK Видео | Слайды
🎲 Абьюзим random_bytes() — Фёдор Кулаков, Lamoda
YouTube | VK Видео | Слайды
📤 Кто отправит outbox? — Валентин Удальцов
YouTube | VK Видео | Слайды
📸 Фотки
https://cloud.mail.ru/public/uLf9/Z3kxmMz6P
Всем спасибо огромное за отличный митап!
Мы выложили отдельными роликами доклады, спасибо @whiskey_code за монтаж.
YouTube | VK Видео | Слайды
YouTube | VK Видео | Слайды
YouTube | VK Видео | Слайды
https://cloud.mail.ru/public/uLf9/Z3kxmMz6P
Всем спасибо огромное за отличный митап!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍17❤15
Thesis Amqp 1.0.0
Многие заметили, что в проекте Thesis уже несколько месяцев подряд происходит какая-то движуха. Если вкратце, мы с Вадимом решили под этим именем выпустить набор современных асинхронных компонентов для PHP, а в будущем, вероятно, и свой фреймворк.
Основной фокус на ближайшее время — реализация недостающих в экосистеме неблокирующих драйверов для эффективного взаимодействия с инфраструктурой (в планах NATS, Kafka, gRPC, Cassandra, YDB).
Сегодня мы рады анонсировать стабильный, готовый к продакшну релиз пакета thesis/amqp:
• под капотом файберы и AMPHP 3, так что клиент можно использовать как в асинхронных, так и синхронных рантаймах,
• API для работы с подтверждениями в режиме publisher confirms,
• API для работы с возвратами при отправке сообщений с флагом
• API итераторов для упрощённого чтения сообщений из очереди,
• API публикации и получения сообщений эффективными батчами (меньше вызовов, потенциально умещаем несколько фреймов в 1 TCP-пакет),
• встроенная поддержка RPC,
• гибкая конфигурация и хорошо типизированный код.
Мы сделали чат Thesis Community, где вы можете задавать вопросы, делиться идеями и предлагать улучшения.
У нас к вам две просьбы:
⭐️ поставить звезду thesis/amqp,
👩🎨 помочь с логотипом для проекта Thesis — лучший скетч (можно использовать ИИ) мы отдадим дизайнеру на отрисовку, а автору подарим слоника Пых.
Многие заметили, что в проекте Thesis уже несколько месяцев подряд происходит какая-то движуха. Если вкратце, мы с Вадимом решили под этим именем выпустить набор современных асинхронных компонентов для PHP, а в будущем, вероятно, и свой фреймворк.
Основной фокус на ближайшее время — реализация недостающих в экосистеме неблокирующих драйверов для эффективного взаимодействия с инфраструктурой (в планах NATS, Kafka, gRPC, Cassandra, YDB).
Сегодня мы рады анонсировать стабильный, готовый к продакшну релиз пакета thesis/amqp:
• под капотом файберы и AMPHP 3, так что клиент можно использовать как в асинхронных, так и синхронных рантаймах,
• API для работы с подтверждениями в режиме publisher confirms,
• API для работы с возвратами при отправке сообщений с флагом
mandatory
,• API итераторов для упрощённого чтения сообщений из очереди,
• API публикации и получения сообщений эффективными батчами (меньше вызовов, потенциально умещаем несколько фреймов в 1 TCP-пакет),
• встроенная поддержка RPC,
• гибкая конфигурация и хорошо типизированный код.
$client = new Client(Config::default());
$channel = $client->channel();
$channel->confirmSelect();
$confirmation = $channel->publishBatch([
new PublishMessage(
message: new Message(
body: 'Hello!',
deliveryMode: DeliveryMode::Persistent,
timestamp: new DateTimeImmutable(),
),
exchange: 'x',
routingKey: 'y',
mandatory: true,
),
// ...
]);
$result = $confirmation->await();
foreach ($result->unconfirmed as $unconfirmedMessage) {
// ...
}
foreach ($result->unrouted as $unroutedMessage) {
// ...
}
Мы сделали чат Thesis Community, где вы можете задавать вопросы, делиться идеями и предлагать улучшения.
У нас к вам две просьбы:
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - thesis-php/amqp: Non-blocking (fiber based) client for AMQP 0.9.1.
Non-blocking (fiber based) client for AMQP 0.9.1. Contribute to thesis-php/amqp development by creating an account on GitHub.
👍46🔥32❤12❤🔥4
Forwarded from Пых.конф’25 — главное PHP-событие этого года!
Мы выложили всю программу!
Несколько тем для затравки:
• PHP True Async: Асинхронность из коробки
• Нестандартное управление памятью в PHP
• Как писать неблокирующие клиенты на PHP
• Переход с Laravel на Swoole+Hyperf
• RAG: Внедряем AI в PHP-бэкенд
• Внутри Yii3
• YDB: от SQL к распределённому SQL
⚡️ https://conf.phpyh.ru/program
Успей купить билет по июльской цене за 13 500 рублей!
Несколько тем для затравки:
• PHP True Async: Асинхронность из коробки
• Нестандартное управление памятью в PHP
• Как писать неблокирующие клиенты на PHP
• Переход с Laravel на Swoole+Hyperf
• RAG: Внедряем AI в PHP-бэкенд
• Внутри Yii3
• YDB: от SQL к распределённому SQL
Успей купить билет по июльской цене за 13 500 рублей!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42👍12👏6❤2🎉2🫡2
Пых
Пыхари на Saint Highload++, встречаемся в 15:20 у стенда компании, которая пишет на PHP, Garage Eight! Сделаем совместное фото. Кирилл Несмеянов и я будем всех ждать!
2025-06-24 15.36.16-0528-TVS05684-N.jpg
730.7 KB
Совместные фото пыхарей на стенде Garage Eight на Saint Highload++
Мы так долго искали эти фотки, и в итоге нашли, спасибо двум Елизаветам (@chernoveli из Garage Eight, и @liza0lis из Онтико) за помощь.
И спасибо всем, кто успел вовремя прийти на стенд, с остальными сфоткаемся на Пых.конф’25!
У "гаражей" на Highload, кстати, был доклад Как правильно готовить RabbitMQ в главном зале. Витя Михайлов уже высоко оценил наш thesis/amqp, будем ждать, что скоро затащит его в кодовую базу Garage Eight.😉
Мы так долго искали эти фотки, и в итоге нашли, спасибо двум Елизаветам (@chernoveli из Garage Eight, и @liza0lis из Онтико) за помощь.
И спасибо всем, кто успел вовремя прийти на стенд, с остальными сфоткаемся на Пых.конф’25!
У "гаражей" на Highload, кстати, был доклад Как правильно готовить RabbitMQ в главном зале. Витя Михайлов уже высоко оценил наш thesis/amqp, будем ждать, что скоро затащит его в кодовую базу Garage Eight.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25🔥18👍13