🤹
Решили с Ромой запустить юморной канал про PHP. Посмотрим, что из этого получится. Подписывайтесь, присылайте мемы и шутки 🤗
@isPHPdying
Решили с Ромой запустить юморной канал про PHP. Посмотрим, что из этого получится. Подписывайтесь, присылайте мемы и шутки 🤗
@isPHPdying
Telegram
PHP умирает?!
"Is PHP Dying" as a Service
Мемасики присылайте @vudaltsov. Статистика: https://tgstat.ru/channel/@isPHPdying.
Мемасики присылайте @vudaltsov. Статистика: https://tgstat.ru/channel/@isPHPdying.
Пыхарь, используешь preloading на проде?
Anonymous Poll
7%
Да
49%
Нет, у нас PHP < 7.4
44%
Нет, PHP >= 7.4
https://www.php.net/manual/ru/opcache.preloading.php
Если можешь, но не используешь, пиши в Пыхтелке, почему.
Если можешь, но не используешь, пиши в Пыхтелке, почему.
Telegram
Пыхтелка
Основной чат канала Пых @phpyh для обсуждения разработки на PHP.
Правила группы: t.me/phpyhtelka/77070
Правила группы: t.me/phpyhtelka/77070
Мы в Happy Inc дождались поддержки PHP 8 от всех наших зависимостей и полностью перешли на 8.0.1 🎉
Никаких проблем не возникло, ничего из ломающего совместимость мы не использовали.
Кодовую базу потихоньку засахариваем 🍭 и убираем визуальный долг. Наконец-то попробовали Rector, инструмент для миграции кода с одной версии PHP на другую в любом направлении. Тул крутой, но реализация пока хромает. Какие-то ректоры выполнились корректно, а какие-то вырезали phpdoc с дженериками или не учли пограничные случаи. Без статического анализатора в одиночку Rector я бы не запускал. В общем, полуручной работы всё равно довольно много, но спасибо PhpStorm за Option(Alt)+Enter 😉
Никаких проблем не возникло, ничего из ломающего совместимость мы не использовали.
Кодовую базу потихоньку засахариваем 🍭 и убираем визуальный долг. Наконец-то попробовали Rector, инструмент для миграции кода с одной версии PHP на другую в любом направлении. Тул крутой, но реализация пока хромает. Какие-то ректоры выполнились корректно, а какие-то вырезали phpdoc с дженериками или не учли пограничные случаи. Без статического анализатора в одиночку Rector я бы не запускал. В общем, полуручной работы всё равно довольно много, но спасибо PhpStorm за Option(Alt)+Enter 😉
В PHP 8 можно очень лаконично превращать
https://php.watch/versions/8.0/throw-expressions
find()
в get()
.https://php.watch/versions/8.0/throw-expressions
🧩 Symfony Modular Skeleton
Один из главных аспектов управления сложностью на проекте — это структурирование кода. "И проблемы это все нетехнические — машинам похеру на структуру кода. Это в основном проблемы коммуникации между людьми", — @fes0r в https://t.me/symfony_php/202422.
Разбивка кода по типам (как в документациях по фреймворкам) или по слоям (навеянная шестиугольными луковицами) — это структурирование по техническому аспекту. Однако если мы взрослые ребята и понимаем, что в первую очередь автоматизируем бизнес-процессы, а не имплементируем архитектуры, то код мы должны разбивать по фичам. Только тогда можно начинать говорить об изоляции изменений, анализе связанности и сцепления модулей, масштабировании и переезд на микросервисы.
В этом году собираюсь выступить с докладом на эту тему и резюмировать знания, которые мы усвоили с коллегами в Happy Inc. А пока оставляю вас со скелетоном для Symfony, при помощи которого можно учиться писать модульный код без запутанных yaml-портянок в папке
https://github.com/vudaltsov/symfony-modular-skeleton
Один из главных аспектов управления сложностью на проекте — это структурирование кода. "И проблемы это все нетехнические — машинам похеру на структуру кода. Это в основном проблемы коммуникации между людьми", — @fes0r в https://t.me/symfony_php/202422.
Разбивка кода по типам (как в документациях по фреймворкам) или по слоям (навеянная шестиугольными луковицами) — это структурирование по техническому аспекту. Однако если мы взрослые ребята и понимаем, что в первую очередь автоматизируем бизнес-процессы, а не имплементируем архитектуры, то код мы должны разбивать по фичам. Только тогда можно начинать говорить об изоляции изменений, анализе связанности и сцепления модулей, масштабировании и переезд на микросервисы.
В этом году собираюсь выступить с докладом на эту тему и резюмировать знания, которые мы усвоили с коллегами в Happy Inc. А пока оставляю вас со скелетоном для Symfony, при помощи которого можно учиться писать модульный код без запутанных yaml-портянок в папке
config
.https://github.com/vudaltsov/symfony-modular-skeleton
GitHub
GitHub - vudaltsov/symfony-modular-skeleton
Contribute to vudaltsov/symfony-modular-skeleton development by creating an account on GitHub.
Обновление рецептов Symfony Flex
Если вы используете Symfony Flex, рекомендую вместе с пакетами обновлять и рецепты. Особенно при минорных и мажорных апдейтах. Это делается в три шага:
•
• проверяем (и, скорее всего, частично откатываем) измененые файлы,
• коммитим.
Команда
Зачем обновлять рецепты? Во-первых, это помогает мигрировать устаревшие конфиги и проще переживать мажорные релизы. Во-вторых, рецепты часто рассказывают про новые функции старых добрых пакетов, по сути, это дополнительный способ актуализации знаний.
Чтобы всегда легко обновлять рецепты, не меняйте расположение и логику конфигов в папке
Если вы используете Symfony Flex, рекомендую вместе с пакетами обновлять и рецепты. Особенно при минорных и мажорных апдейтах. Это делается в три шага:
•
composer sync-recipes --force
,• проверяем (и, скорее всего, частично откатываем) измененые файлы,
• коммитим.
Команда
sync-recipes --force
накатывает только обновлённые рецепты и фиксирует их версии в файл symfony.lock
. То есть если сразу же выполнить её ещё раз, уже ничего не произойдёт.Зачем обновлять рецепты? Во-первых, это помогает мигрировать устаревшие конфиги и проще переживать мажорные релизы. Во-вторых, рецепты часто рассказывают про новые функции старых добрых пакетов, по сути, это дополнительный способ актуализации знаний.
Чтобы всегда легко обновлять рецепты, не меняйте расположение и логику конфигов в папке
config/packages
. Вносите изменения так, чтобы потом было легко их идентифицировать в диффах. При конфигурации вендорных библиотек и бандлов без рецептов добавляйте для каждого свой файл конфига с соответствующим именем.Про рекламу и вакансии
На текущий момент на канале Пых нет платной рекламы. Я рекомендую только то, что ± относится к PHP и пришлось мне по душе.
По поводу упоминания компаний и размещения вакансий для пыхарей у меня особая позиция. Все мы так или иначе ищем работу (активно или на перспективу), поэтому эта информация действительно полезна и релевантна. Однако последнее, чего бы хотелось, это чтобы Пых превратился в доску объявлений про знание PHP 5.3+ на уровне разговорного. Поэтому я всегда предлагаю рекрутерам совместно сделать контент поувлекательнее. Например, небольшое онлайн-интервью с представителем тех- и HR-отдела, в котором я задам несколько вопросов о позиции, проекте и почему PHP. Уверен, это было бы интересно всем и принесло бы куда больше откликов. Тем не менее все ранее писавшие мне рекрутеры горячо со мной согласились, но так и не вернулись 😓
Я верю в вас, уважаемые эйчары, и жду ваших идей! @vudaltsov
На текущий момент на канале Пых нет платной рекламы. Я рекомендую только то, что ± относится к PHP и пришлось мне по душе.
По поводу упоминания компаний и размещения вакансий для пыхарей у меня особая позиция. Все мы так или иначе ищем работу (активно или на перспективу), поэтому эта информация действительно полезна и релевантна. Однако последнее, чего бы хотелось, это чтобы Пых превратился в доску объявлений про знание PHP 5.3+ на уровне разговорного. Поэтому я всегда предлагаю рекрутерам совместно сделать контент поувлекательнее. Например, небольшое онлайн-интервью с представителем тех- и HR-отдела, в котором я задам несколько вопросов о позиции, проекте и почему PHP. Уверен, это было бы интересно всем и принесло бы куда больше откликов. Тем не менее все ранее писавшие мне рекрутеры горячо со мной согласились, но так и не вернулись 😓
Я верю в вас, уважаемые эйчары, и жду ваших идей! @vudaltsov
Сегодня в 19:30 по Москве Пётр, Роман и я наденем леггинсы, наполним стаканы смузи и зачилим в Clubhouse, чтобы обсудить первые впечателния от PHP 8.
Если у вас есть айфон или не лень запустить эмулятор, присоединяйтесь!
https://www.joinclubhouse.com/event/ma4lpZXL
Если у вас есть айфон или не лень запустить эмулятор, присоединяйтесь!
https://www.joinclubhouse.com/event/ma4lpZXL
📺 Как регистрировать и тестировать shutdown функции
Новый технический ролик от меня на канале PHP Point!
https://youtu.be/5eOHwubukgY
Новый технический ролик от меня на канале PHP Point!
https://youtu.be/5eOHwubukgY
YouTube
Как регистрировать и тестировать shutdown функции
Валентин Удальцов про деструкторы, регистрацию и тестирование shutdown функций, а также различные нюансы вокруг замыканий и уборки мусора в PHP.
Код на GitHub: https://github.com/phppoint/how-to-register-and-test-shutdown-functions.
Подписывайтесь на наши…
Код на GitHub: https://github.com/phppoint/how-to-register-and-test-shutdown-functions.
Подписывайтесь на наши…
На канале PHP задачи с собеседований опубликовали мою трешовую задачку 🤪
Если не увидели проблему, не отвечайте сразу "этому коду не помочь". Что называется, take your time. Цель задачи — проверить знания в нескольких областях: итераторы, генераторы, замыкания, PHP 8.
И да, она, конечно, не для собеседования, скорее для гимнастики.
https://t.me/phpquiz/456
Если не увидели проблему, не отвечайте сразу "этому коду не помочь". Что называется, take your time. Цель задачи — проверить знания в нескольких областях: итераторы, генераторы, замыкания, PHP 8.
И да, она, конечно, не для собеседования, скорее для гимнастики.
https://t.me/phpquiz/456
Telegram
PHP задачи с собеседований
❓Задача от Валентина, автора канала Пых:
Что нужно сделать, чтобы код заработал и вывел 1256?
Что нужно сделать, чтобы код заработал и вывел 1256?
Завтра в 11:00 по Москве будет большой стрим про PHP в 2021-ом году!
🎤 Доклады:
• про WebRTC от Ильи Левина из Skyeng,
• про gRPC от Антона Жукова из ManyChat.
🏄 Острые дискуссии, мнения о 2020, планы на 2021:
• Александр Макаров (Yii),
• Антон Околелов (Цинковый прод),
• Валентин Удальцов (Пых),
• Дмитрий Елисеев (ElisDN),
• Константин Буркалев (SDCast),
• Никита Попов (PHP core team),
• Николай Пучко (PHP.Today),
• Петр Мязин (Пятиминутка PHP),
• Роман Пронский (PHP Дайджест),
• Сергей Жук (Между Скобок).
🎁 Итоги опроса про лучшее из мира PHP за 2020 и вручение подарков.
https://youtu.be/6JF2U39J4RY
🎤 Доклады:
• про WebRTC от Ильи Левина из Skyeng,
• про gRPC от Антона Жукова из ManyChat.
🏄 Острые дискуссии, мнения о 2020, планы на 2021:
• Александр Макаров (Yii),
• Антон Околелов (Цинковый прод),
• Валентин Удальцов (Пых),
• Дмитрий Елисеев (ElisDN),
• Константин Буркалев (SDCast),
• Никита Попов (PHP core team),
• Николай Пучко (PHP.Today),
• Петр Мязин (Пятиминутка PHP),
• Роман Пронский (PHP Дайджест),
• Сергей Жук (Между Скобок).
🎁 Итоги опроса про лучшее из мира PHP за 2020 и вручение подарков.
https://youtu.be/6JF2U39J4RY
Пых
Завтра в 11:00 по Москве будет большой стрим про PHP в 2021-ом году! 🎤 Доклады: • про WebRTC от Ильи Левина из Skyeng, • про gRPC от Антона Жукова из ManyChat. 🏄 Острые дискуссии, мнения о 2020, планы на 2021: • Александр Макаров (Yii), • Антон Околелов…
YouTube
Большой стрим PHP-сообщества — Никита Попов, Александр Макаров, Валентин Удальцов и много других
Большой стрим с интересными докладами, обзором главных событий и явлений в мире PHP и крутыми призами. Больше подробностей и итоги опроса на https://phpcommunity.ru/brave-new-2021.
00:00 Интро
8:32 Обзорный доклад "Как работает видеосвязь в браузере" от…
00:00 Интро
8:32 Обзорный доклад "Как работает видеосвязь в браузере" от…
Основные итоги опроса про лучшее из мира PHP за 2020 🔥
🥈 В номинации Персона года я занял 2-ое место между Никитой Поповым и Александром Макаровым.
🥈 В номинации Канал года Пых занял 2-ое место между PHP Digest и PHP задачи с собеседований.
🥈 В номинации YouTube-канал года наш с Ромой PHP Point занял 2-ое место между HighLoad Channel и Skyeng ITeam.
Я счастлив оказаться на призовых местах бок о бок с такими замечательными людьми и ресурсами. Спасибо всем, кто подписан и кто уже отписался, кто благодарит и хейтит, кто приглашает на конференции и, прости Господи, на подкасты.
Мы все уверенно шагаем в 2021-ом, и дальше будет только круче!
Итоги опроса смотрите на https://phpcommunity.ru/brave-new-2021.
🥈 В номинации Персона года я занял 2-ое место между Никитой Поповым и Александром Макаровым.
🥈 В номинации Канал года Пых занял 2-ое место между PHP Digest и PHP задачи с собеседований.
🥈 В номинации YouTube-канал года наш с Ромой PHP Point занял 2-ое место между HighLoad Channel и Skyeng ITeam.
Я счастлив оказаться на призовых местах бок о бок с такими замечательными людьми и ресурсами. Спасибо всем, кто подписан и кто уже отписался, кто благодарит и хейтит, кто приглашает на конференции и, прости Господи, на подкасты.
Мы все уверенно шагаем в 2021-ом, и дальше будет только круче!
Итоги опроса смотрите на https://phpcommunity.ru/brave-new-2021.
Как получить все типы значения
Для примитивов всё просто — в PHP 8 теперь есть функция get_debug_type, она возвращает тип в привычном формате.
В случае объекта помимо класса нужно вернуть список суперклассов (умное название для родительских) и интерфейсов. Проще всего их добыть встроенными функциями class_parents и class_implements.
Что касается порядка отдаваемых типов, как правило, требуется сортировка от конкретных к абстрактным. Например, при поиске обработчика значения по типу имеет смысл сначала запросить узкоспециальный обработчик, а затем — универсальный.
https://3v4l.org/DFuO8
Для примитивов всё просто — в PHP 8 теперь есть функция get_debug_type, она возвращает тип в привычном формате.
В случае объекта помимо класса нужно вернуть список суперклассов (умное название для родительских) и интерфейсов. Проще всего их добыть встроенными функциями class_parents и class_implements.
Что касается порядка отдаваемых типов, как правило, требуется сортировка от конкретных к абстрактным. Например, при поиске обработчика значения по типу имеет смысл сначала запросить узкоспециальный обработчик, а затем — универсальный.
https://3v4l.org/DFuO8
Давайте перестанем задавать вопрос про дженерики в PHP 😒
Не потому, что их "не добавят", а потому что они давно есть и отлично работают! Ставим Psalm или PHPStan, и вуаля — в нашем распоряжении не только дженерики, но и условные типы, типы пересечений, типизация массивов и колбэков, контроль доступа к свойствам и богатая экосистема плагинов вокруг этого всего!
Мы много лет указывали примитивные типы и аннотации в PHPDoc и особо не жаловались. С релизом PHP 8 абсолютно все встроенные типы и аннотации в форме атрибутов стали доступны на уровне синтаксиса. Лишь дженерики остались в PHPDoc, да и то уже частично поддерживаются в PhpStorm. Неужели в контексте проблем, сопряжённых с добавлением дженериков в PHP, для нас это плохой компромисс?! По-моему, восхитительный!
Пока гоферы обсуждают свой очередной черновик дженериков, прогрессивные пыхари уже давно прокачивают скилл обобщённого программирования и пишут код, типизированный не хуже, чем в TypeScript или Kotlin. Не отставай и ты 😉
Не потому, что их "не добавят", а потому что они давно есть и отлично работают! Ставим Psalm или PHPStan, и вуаля — в нашем распоряжении не только дженерики, но и условные типы, типы пересечений, типизация массивов и колбэков, контроль доступа к свойствам и богатая экосистема плагинов вокруг этого всего!
Мы много лет указывали примитивные типы и аннотации в PHPDoc и особо не жаловались. С релизом PHP 8 абсолютно все встроенные типы и аннотации в форме атрибутов стали доступны на уровне синтаксиса. Лишь дженерики остались в PHPDoc, да и то уже частично поддерживаются в PhpStorm. Неужели в контексте проблем, сопряжённых с добавлением дженериков в PHP, для нас это плохой компромисс?! По-моему, восхитительный!
Пока гоферы обсуждают свой очередной черновик дженериков, прогрессивные пыхари уже давно прокачивают скилл обобщённого программирования и пишут код, типизированный не хуже, чем в TypeScript или Kotlin. Не отставай и ты 😉
Forwarded from PHP Digest
Оператор new в инициализаторах
https://wiki.php.net/rfc/new_in_initializers
Не прошло и недели после стрима, как Никита Попов опубликовал обещанный RFC, разрешающий использовать
Если его примут, то в качестве дефолтных значений статических переменных, параметров, констант и свойств можно будет использовать объекты.
Интересно, что в рамках этого предложения атрибуты тоже получат право использовать объекты. В частности, это позволит оформлять атрибутами композитные констрейнты Symfony Validator (#38503).
https://github.com/php/php-src/pull/6746
// Автор заметки: Валентин Удальцов, канал Пых.
https://wiki.php.net/rfc/new_in_initializers
Не прошло и недели после стрима, как Никита Попов опубликовал обещанный RFC, разрешающий использовать
new
в инициализаторах.Если его примут, то в качестве дефолтных значений статических переменных, параметров, констант и свойств можно будет использовать объекты.
Интересно, что в рамках этого предложения атрибуты тоже получат право использовать объекты. В частности, это позволит оформлять атрибутами композитные констрейнты Symfony Validator (#38503).
https://github.com/php/php-src/pull/6746
// Автор заметки: Валентин Удальцов, канал Пых.