ar
Feedback
PHP Digest

PHP Digest

الذهاب إلى القناة على Telegram

PHP Дайджест Новости, материалы и инструменты из мира PHP — раз в месяц. Вопросы, замечания, предложения: @pronskiy

إظهار المزيد
8 309
المشتركون
لا توجد بيانات24 ساعات
-117 أيام
+530 أيام
أرشيف المشاركات
PHP-Дайджест № 182 3 принятых и 6 новых RFC-предложений из PHP Internals, включая голосование за новый синтаксис для атрибутов — @@ и почему #[] был бы лучше, переименования black/whitelist в PHP-мире, как отлаживают PHP-разработчики, видео, подкасты и многое другое. https://habr.com/p/507636/

В продолжение вчерашнего стрима. Вот Marcel Pociot, вместо жалоб о том, что в PHP нет асинхронности, берет и делает аналог ngrok на PHP, используя ReactPHP. https://github.com/beyondcode/expose Инструмент позволяет пробросить туннель и сделать локальный ресурс доступным глобально. Очень удобно когда надо быстро продемонстрировать сайт. Или отладить веб-хуки например. Есть пост с описанием внутреннего устройства: https://pociot.dev/28-introducing-expose-an-easy-to-use-tunneling-service-implemented-in-pure-php Конечно, сервер Expose можно запустить и на своем домене: https://beyondco.de/docs/expose/server/starting-the-server Справедливости ради у меня сходу не все заработало, так что продукт еще WIP и если нужна стабильность, то можно переждать на ngrok.

Где купить PHP слоника Прямо сейчас доступны серый и черный слоники Symfony https://shop.symfony.com/collections/all Пушистый PHP Roundtable https://store.osmihelp.org/collections/frontpage/products/the-official-elephpant-plush-toy-of-the-php-roundtable Белый ConFoo https://shop.confoo.ca/white-elephpant Парочка, в том числе оригинальный синий, есть у коллекционера Тима Бонда https://www.tim-bond.com/elephpants/ Черного панк-слоника PhpStorm пока купить нельзя. Но его можно получить другими способами. (Карантинные меры ослабляют и мы их наконец-то можем отправить) В самом разгаре программа раннего доступа PhpStorm 2020.2 и для того чтоб получить слоника достаточно зарепортить 5+ подтвержденных (!) багов в ЕАПе. https://blog.jetbrains.com/phpstorm/2020/06/whats-coming-in-phpstorm-2020-2-eap-video-series-episode-1/

25 лет PHP и скидка 50% на PhpStorm 8 июня 1995 года, программист родом из Гренландии Расмус Лердорф публикует в usenet анонс
25 лет PHP и скидка 50% на PhpStorm 8 июня 1995 года, программист родом из Гренландии Расмус Лердорф публикует в usenet анонс набора CGI-скриптов, который он назвал PHP Tools. Иногда говорят, что первые версии PHP были написаны на Perl. Это, конечно же, неправда. Главные факты и события из 25 лет истории PHP смотрите в таймлайне. https://jb.gg/php25 Заревьюить и дополнить его помогли непосредственные участники событий: Andi Gutmans, Derick Rethans, Peter Kokot, Александр Макаров, Дмитрий Стогов и другие. Еще 27 мая исполнилось 10 лет PhpStorm. Чтоб отметить сразу два дня рождения делаем скидку 50% на персональную годовую подписку. FAQ по скидке на Хабре. С днем рождения PHP!

Разыгрываем билеты на PHP fwdays'20 | Special edition, которая пройдет онлайн 6 июня https://fwdays.com/en/event/php-fwdays-special-edition Вторая часть конференции со звездным составом: Jordi Boggiano (Composer), Sebastian Bergmann (PHPUnit), Nikita Popov (PHP Core), Marco Pivetta (aka Ocramius) и другие. Код на скидку 15%: PHPDIGEST20. Разыгрываем 2 билета, победителей определяет @VoterBiBot сегодня, 4 июня, в 20:00. (Счетчик кнопки обновляется с задержкой) ***** Победители: Игорь Драндин, Cactus

Голосования по RFC Сейчас на стадии голосования находятся три предложения: • Проверка корректности сигнатур магических методов; • Оптимизации без кеширования опкодов; • Использование зарезервированного неймспейса \PHP в ядре. Голосовать могут, как всегда, только контрибьюторы. Кстати, чтоб получить право голоса, можно контрибьютить в документацию и тесты — для них знания C не требуется. Тем временем Bejamin Eberlei (автор атрибутов) сделал на сайте https://php-rfc-watch.beberlei.de/ голосование для комьюнити. Силы никакой оно не имеет, но все равно интересно.

PHP-Дайджест № 181 3 новых и 4 принятых RFC предложения для PHP 8, включая объявление свойств в конструкторе, о блокировке PHP-ML из-за плагиата, почему разработчики ненавидят PHP, порция полезных инструментов и многое другое. #дайджест https://habr.com/p/504734/

Стартовал PhpStorm 2020.2 EAP В этом релизе будем улучшать подсистемы, фиксить старые баги, готовиться к PHP 8 и не обойдется
Стартовал PhpStorm 2020.2 EAP В этом релизе будем улучшать подсистемы, фиксить старые баги, готовиться к PHP 8 и не обойдется без новых фич. В первом билде можно пощупать полную поддержку пул-реквестов GitHub — теперь все действия доступны прямо в IDE. Можно ревьювить, комментировать, мерджить. Добавили виджет инспекций — он позволяет быстро сконфигурировать, какие ошибки показывать, и пробежаться по всем ошибкам. И также сильно переработали анализ потока выполнения PHP. Это позволяет добавить новые инспекции и дает возможность исправить много старых багов. Как и всегда, EAP-версию можно использовать бесплатно. https://blog.jetbrains.com/phpstorm/2020/05/phpstorm-2020-2-early-access-program-is-now-open/

PHP fwdays Online — 30 и 31 мая https://fwdays.com/en/event/php-fwdays-2020 Промокод на скидку 15%: PHPDIGEST2020 Разыгрываем 2 билета, победителей определяет бот @VoterBiBot сегодня, 27 мая, в 20:00. (Счетчик кнопки обновляется с задержкой) ***** Победители: Sergii Gzh, Maksim Aleshchenko

На ближайших выходных сразу два крутых PHP-мероприятия. Ребята уже скоординировались и больше таких коллизий не будет. Ну а в этот раз можно насладиться выбором. Про 3-й виртуальный PHP-митап вы наверняка уже слышали. Но если вдруг нет, то в субботу, 30 мая, будет 5 докладов, включая историю от того самого слепого разработчика, и зум с крутыми гостями. Кроме того, 30 и 31 мая будет проходить PHP fwdays online. Программа вот тут https://fwdays.com/en/event/php-fwdays-2020#program-event. Сам жду доклад Макса Рафалко (Infection) о принципах проектирования пакетов. Уж очень понравился его документ о выделении пакета из Infection https://github.com/infection/infection/issues/922. Организаторы PHP fwdays предоставили пару билетов для розыгрыша — он в следующем сообщении.

Принят RFC, который добавит тип mixed в PHP 8 Есть два основных аргумента в его пользу: - mixed сигнализирует о том, что тип не забыли указать, просто он не может быть уточнён, - mixed часто фигурирует в документации PHP. Смешанный тип эквивалентен объединению типов null|bool|int|float|string|array|object|callable|resource. При наследовании mixed по общему правилу может использоваться в следующих ситуациях:
abstract class A
{
    abstract public function bar(string $arg): mixed;
}
 
final class B extends A
{
    /**
     * тип аргумента расширен в подклассе
     * тип возвращаемого значения сужен в подклассе
     */
    public function bar(mixed $arg): int
    {...}
}

Тип ?mixed считается невалидным и избыточным: mixed по определению включает null. Код с таким типом сгенерирует фатальную ошибку. О других нюансах использования смешанного типа читайте в RFC: https://wiki.php.net/rfc/mixed_type_v2. @vudaltsov | https://twitter.com/vudaltsov

PHP-Дайджест № 180 2 принятых, 2 отклоненных и 6 новых RFC предложений из PHP Internals, обзор PHP 8, порция полезных инструментов, онлайн мероприятия, видео, подкасты и многое другое. #дайджест https://habr.com/p/502442/

PHP Russia Online – Live 🔴 Конференция уже в эфире. Ссылки на трансляции: С синхронным переводом на русский https://www.youtube.com/watch?v=zYWDlaOOFTU Оригинальная на английском https://www.youtube.com/watch?v=cQZBS3u3SeU

Принят #RFC о приведении чисел с плавающей точкой к строке без учета локали. https://wiki.php.net/rfc/locale_independent_float_to_string Сейчас выражение (string) 3.14 возвращает различный результат для, например, английского и русского языков: https://3v4l.org/MaUIT. Это может приводить к неприятным ошибкам в мультиязычных системах (интересные примеры в RFC). В PHP 8 в результате принятия предложения приведение чисел с плавающей точкой будет работать одинаково во всех локалях.
setlocale(LC_ALL, 'ru_RU');
$f = 3.14;

(string) $f;  // 3,14 would become 3.14
strval($f);   // 3,14 would become 3.14
var_dump($f); // float(3,14) becomes float(3.14)
settype($f, "string"); // 3,14 would become 3.14
implode([$f]);  // 3,14 would become 3.14

Для приведения с учетом локали можно пользоваться функциями семейства printf со спецификатором f: sprintf('%f', 3.14). @vudaltsov | https://twitter.com/vudaltsov

#RFC Именованные аргументы функций https://wiki.php.net/rfc/named_params Никита идет по списку, предложенному Ларри Гарфильдо
#RFC Именованные аргументы функций https://wiki.php.net/rfc/named_params Никита идет по списку, предложенному Ларри Гарфильдом, и выдвигает на обсуждение обновленный и проработанный документ. Именованные аргументы позволяют передавать аргументы в функцию на основе имени параметра, а не его позиции. Причем можно комбинировать именованные и позиционные. Пропуск дефолтных значений:
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);
станет:
htmlspecialchars($string, double_encode: false);

Еще это важно для атрибутов, так как сейчас с ними вот такой PHPDoc:
/**
 * @Route("/api/posts/{id}", methods={"GET","HEAD"})
 */

выглядел бы вот так:
<<Route("/api/posts/{id}", ["methods" => ["GET", "HEAD"]])>>

А с этим RFC будет красиво:
<<Route("/api/posts/{id}", methods: ["GET", "HEAD"])>>

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

PHP-Дайджест № 179 4 принятых RFC предложения для PHP 8, включая атрибуты (аннотации / декораторы) — голосование по ним заканчивается сегодня в 12 UTC, но результат уже понятен. Также, как всегда, порция полезных инструментов, онлайн-конференции и митапы, видео, подкасты и многое другое. #дайджест https://habr.com/p/500314/

На прошедшем онлайн PHP-митапе в викторине было два каверзных вопроса, на которые многие ответили неправильно. Можно ли назвать метод "function"?
class PhpQuiz
{
    public function function() { }
}

Да, можно. Более того, благодаря вот этому RFC Context Sensitive Lexer, начиная с PHP 7.0 методы и константы класса можно называть ключевыми словами. Но PHP был бы не PHP, если б в нем не было забавного бага: если метод в трейте называется 'namespace', то для него не получится использовать алиас. И второй вопрос. Что выведет var_dump(0.1 + 0.2 === 0.3) ? Ответ: bool(false) И это не особенность PHP, в чем можно убедиться проверив аналогичный пример в любом другом языке программирования. Подробнее вот здесь http://0.30000000000000004.com/ Именно поэтому хранить денежные значения в базе данных в поле типа float/double очень плохая идея. (Не только в базе, а вообще использовать для денежных значений float).

У PHP крутое сообщество. Особенно круто видеть, как разные группы и компании объединяются, чтоб сделать что-то классное вместе. Во-первых, PHP Russia Online будет бесплатной благодаря Badoo. Если еще не зарегистрировались, то это можно сделать вот тут https://conf.ontico.ru/polls/2901184/onepage. Доклады на офлайн-конференции не будут пересекаться с онлайн-версией, поэтому подключиться к онлайну можно независимо от того собираетесь на офлайн или нет. Во-вторых, в субботу в 11:50 UTC+3 начнется онлайн PHP-митап организованный совместно Skyeng и минским сообществом PHPofBy. Ссылка на трансляцию https://www.youtube.com/watch?v=se3F83O0ZiY. На нем, как и в прошлый раз, я проведу викторину с вопросами по PHP от Пети Мязина из Пятиминутки PHP, Skyeng, и парочкой от меня лично.

PHP-Дайджест № 178 Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голосовании, порция полезных инструментов, подкасты, интервью, статьи. https://habr.com/p/498246/ #дайджест

PhpStorm 2020.1 Первое мажорное обновление в этом году зарелизили из дома. Под капотом поддержка composer.json, покрытие кода с PCOV и PHPDBG, улучшения для метаданных и вывода типов в PHP, инструменты для PHPUnit, проверка правописания и грамматики и много другого. Возможно, вы уже успели обновиться и посмотреть, что нового. Но если нет, то вот подробный разбор всех изменений на русском: https://habr.com/ru/company/JetBrains/blog/497358/