Напоминаю, что уже давно можно пользоваться функциями PHP 8 даже если у вас 7.1!
Ставим Symfony Polyfill PHP 8.0 и получаем следующие функции:
• str_contains,
• str_starts_with,
• str_ends_with,
• get_debug_type,
• preg_last_error_msg,
• fdiv,
• get_resource_id.
Ставим Symfony Polyfill PHP 8.0 и получаем следующие функции:
• str_contains,
• str_starts_with,
• str_ends_with,
• get_debug_type,
• preg_last_error_msg,
• fdiv,
• get_resource_id.
composer req symfony/polyfill-php80
GitHub
GitHub - symfony/polyfill-php80: Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions
Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions - symfony/polyfill-php80
Самый быстрый способ выяснить, какие пакеты мешают вам перейти на PHP 8:
На скрине ситуация на нашем проекте в Happy Inc. Делитесь в Пыхтелке, как у вас с этим обстоят дела 🤓
lcobucci/jwt в 4-ой версии уже поддерживает PHP 8, но пока не дошли руки поправить нарушения обратной совместимости, под которые мы попадаем.
composer why-not php ^8
На скрине ситуация на нашем проекте в Happy Inc. Делитесь в Пыхтелке, как у вас с этим обстоят дела 🤓
lcobucci/jwt в 4-ой версии уже поддерживает PHP 8, но пока не дошли руки поправить нарушения обратной совместимости, под которые мы попадаем.
Через час собираемся на PHP Point, чтобы обсудить трейты!
Будет две трансляции:
• на YouTube https://youtu.be/DEk56xbMITo,
• и ВКонтакте https://vk.com/hexlet?w=wall-54520471_9949 (спасибо @hexlet_ru).
Крутая альтернативная обложка от phpcommunity.ru (SkyEng) 👨🎨
Будет две трансляции:
• на YouTube https://youtu.be/DEk56xbMITo,
• и ВКонтакте https://vk.com/hexlet?w=wall-54520471_9949 (спасибо @hexlet_ru).
Крутая альтернативная обложка от phpcommunity.ru (SkyEng) 👨🎨
Пых
Через час собираемся на PHP Point, чтобы обсудить трейты! Будет две трансляции: • на YouTube https://youtu.be/DEk56xbMITo, • и ВКонтакте https://vk.com/hexlet?w=wall-54520471_9949 (спасибо @hexlet_ru). Крутая альтернативная обложка от phpcommunity.ru (SkyEng)…
YouTube
Трейты в PHP — зло? Валентин Удальцов против всех (Часть 1)
Продолжение: https://youtu.be/xoEPNiMtVps
Битва сторонников и противников трейтов, которая раз и навсегда расставит точки!
Партнеры: Skyeng 🎸, Hexlet 🥁
http://phpcommunity.ru
Участники:
Валентин Удальцов (Happy Inc, Пых)
Сергей Жук (Skyeng, подкаст «Между…
Битва сторонников и противников трейтов, которая раз и навсегда расставит точки!
Партнеры: Skyeng 🎸, Hexlet 🥁
http://phpcommunity.ru
Участники:
Валентин Удальцов (Happy Inc, Пых)
Сергей Жук (Skyeng, подкаст «Между…
Единственный правильный способ прокинуть логгер ☝️
Что не так с
• LoggerAwareInterface делает дыру в сервисе методом
• В LoggerAwareTrait свойство
PSR-3 я также комментировал в среду на стриме про трейты: https://youtu.be/xoEPNiMtVps?t=4069.
Что не так с
LoggerAware*
костылями:• LoggerAwareInterface делает дыру в сервисе методом
setLogger
. Да и как контракт он абсолютно бесполезен.• В LoggerAwareTrait свойство
logger
, что бы ни говорил phpdoc, имеет значение по умолчанию null и, соответственно, nullable тип. Значит его либо нужно всегда проверять if ($this->logger !== null)
, либо как в сниппете инициализировать в конструкторе пустым логгером, только уже не в качестве фоллбэка, а превентивно. В любом случае код получится более сложным и менее очевидным.PSR-3 я также комментировал в среду на стриме про трейты: https://youtu.be/xoEPNiMtVps?t=4069.
Рекомендую PHP Дайджест Live!
На стриме Рома расставляет акценты и делает дайджесты ещё более подробными и полезными.
Например, до вчерашнего лайва я хуже понимал концепцию файберов, не знал про нюансы
https://youtu.be/mvjj_YX_BqQ
На стриме Рома расставляет акценты и делает дайджесты ещё более подробными и полезными.
Например, до вчерашнего лайва я хуже понимал концепцию файберов, не знал про нюансы
#[Deprecated]
и режимы в XDebug 3 и не решался заценить реакцию Бугаенко на PHP 8.https://youtu.be/mvjj_YX_BqQ
YouTube
PHP Digest Live #195. Асинхронный PHP в 8.1, нативные атрибуты, слоники
Fibers для асинхронного PHP, первые нативные атрибуты, короткий match и другие RFC предложения для PHP 8.1, инструменты, статьи + больше деталей, результаты розыгрыша и новый конкурс со слониками.
Опрос по итогам года: https://skyeng-school.typeform.com/to/iNfIjQbr…
Опрос по итогам года: https://skyeng-school.typeform.com/to/iNfIjQbr…
Подводя итоги, многие примеряют отрицательные эпитеты к уходящему году. Но для меня он в первую очередь продуктивный, медийный и полный общения с замечательными людьми!
Большое спасибо за вдохновение и помощь Роману Пронскому, Алексею Корнееву, Алисе Кругловой, Алисе Мартыновой, Сергею Жуку, Антону Мореву, Александру Макарову и Максиму Масюкевичу. Спасибо вам, пыхари, за просмотры, хлопки, дизлайки, комментарии и сообщения. Эта открытка про всех нас ✊
С Новым Годом!!! 🐂🎄☃️🎆🎁
Большое спасибо за вдохновение и помощь Роману Пронскому, Алексею Корнееву, Алисе Кругловой, Алисе Мартыновой, Сергею Жуку, Антону Мореву, Александру Макарову и Максиму Масюкевичу. Спасибо вам, пыхари, за просмотры, хлопки, дизлайки, комментарии и сообщения. Эта открытка про всех нас ✊
С Новым Годом!!! 🐂🎄☃️🎆🎁
Буду благодарен, если вы пройдёте опрос от phpcommunity.ru и PHP Digest по итогам 2020 года.
Результатыпотешат ЧСВ победителей номинаций сориентируют нас по контенту в новом году 🔭
https://skyeng-school.typeform.com/to/iNfIjQbr
Опрос анонимный, оставляйте почту только если хотите поучаствовать в розыгрыше 🐘
Результаты
https://skyeng-school.typeform.com/to/iNfIjQbr
Опрос анонимный, оставляйте почту только если хотите поучаствовать в розыгрыше 🐘
🤹
Решили с Ромой запустить юморной канал про 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
. Вносите изменения так, чтобы потом было легко их идентифицировать в диффах. При конфигурации вендорных библиотек и бандлов без рецептов добавляйте для каждого свой файл конфига с соответствующим именем.