PHP-Дайджест № 174 (10 января – 24 февраля 2020)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Свежая подборка со ссылками на новости и материалы. В выпуске: 5 новых RFC из PHP Internals, а также предложение по развитию языка и пара прототипов новых фич в виде пул-реквестов, порция полезных инструментов, видео, подкасты и многое другое.

Приятного чтения!



Новости и релизы


  • PHP 7.4.3 — На этот раз всё-таки исправили ошибки с использованием opcache.preload_user и теперь предзагрузку можно включать в продакшене.
  • PHP 7.3.15
  • PHP 7.2.28
  • Ближайшие мероприятия:
    • Санкт-Петербург, 28 февраля: SymCode-митап, TBA
    • Ростов-на-Дону, 29 февраля: 3-й PHP-митап городского чата
    • Ярославль, 12 марта: BeerPHP
    • Нижний Новгород, 14 марта: 3-й PHP-митап городского чата
    • Екатеринбург, 26 марта: 3-й PHP-митап
    • Казань, 28 марта: 2-й PHP-митап
    • skyeng/php-communities — Открытый список PHP-событий, спикеров и организаторов.

    • PHP fwdays'20, Киев, 30 мая — В этом году среди докладчиков тот самый Никита Попов! Для читателей дайджеста есть промокод со скидкой 15%: PHPDIGEST2020.

PHP Internals


  • Language evolution — Предложение Никиты о том, как продолжать двигать PHP вперед, не ломая легаси код. Подробнее в канале дайджеста, и обсуждение в пул-реквесте.
  • Приняты: [RFC] Variable Syntax Tweaks, [RFC] Static return type, [RFC] Allow ::class on objects
  • [RFC] Write-Once Properties — Предлагается добавить новый модификатор для свойств, который позволит инициализировать свойства, но запретить их изменение. Открытым остаётся вопрос названия модификатора, из вариантов: final, immutable, readonly, writeonce, locked, sealed.
    Скрытый текст
    class Foo
    {
        <keyword> public int $a = 1;
        <keyword> public string $b;
        <keyword> public array $c = ["foo"];
        <keyword> public object $d;
    
        public function __construct()
        {
            $this->b = "foo";
        }
    }
    
    $foo = new Foo();
    
    $foo->a = 42;		// EXCEPTION: property a has already been initialized
    $foo->b = "bar";	// EXCEPTION: property b has already been initialized
    $foo->a++;		    // EXCEPTION: incrementing/decrementing is forbidden
    unset($foo->c);		// EXCEPTION: unsetting is forbidden
    $foo->c[] = "bar";	// EXCEPTION: arrays can't be modified
    $var= &$this->c;	// EXCEPTION: reference isn't allowed
    
    $foo->d = new Foo();	// SUCCESS: property d hasn't been initialized before
    $foo->d->foo = "foo";	// SUCCESS: objects are still mutable internally
    

    У предложения неплохие шансы. Вероятно, для таких свойств будет запрещено установление значения по умолчанию, поскольку, по сути, это то же самое, что константа класса.
  • [RFC] str_contains — Предлагается добавить функцию str_contains(string $haystack , string $needle) :bool, которая проверяет, содержится ли строка в другой строке вместо использования strpos() или strstr().
  • [RFC] Object-based token_get_all() alternative — Предлагается добавить альтернативу для текущей функции token_get_all(), которая вместо микса строк и массивов возвращал бы массив объектов PhpToken.
  • [RFC] get_debug_type — Ещё одна вспомогательная функция: комбинация gettype() и get_class().
  • [RFC] Allow explicit call-site pass-by-reference annotation — Обновлённый RFC от Никиты снова на обсуждении. Предлагается сделать возможным явное указание передачи аргументов по ссылке. Тем самым предупреждая разработчика о том, что переданная переменная изменится. В этот раз также предлагается добавить директиву, чтоб сделать режим опциональным.
    Скрытый текст
    declare(require_explicit_send_by_ref=1);
    
    function byRef(&$ref) {...}
    byRef(&$var);
    
  • [Pre-RFC] Add support for «decorator» pattern — Никита выложил прототип реализации паттерна «декоратор» для PHP.
    Скрытый текст
    interface Foo {
        public function method1(int $a): void;
        public function method2(): int;
        public function method3(string $b): string;
        public function method4(): stdClass;
        // ...
    }
    
    class ComposedFoo implements Foo {
        private decorated Foo $inner;
        public function __construct(Foo $inner) { $this->inner = $inner; }
        public function method4(): stdClass {
            return $DO_SOMETHING_DIFFERENT_HERE;
        }
    }
    
    /*
    Свойство помечено как decorated, что означает, что автоматически будут добавлены
    методы переадресации для всех публичных методов Foo, если только они не будут явно
    переопределены в классе. Эти методы будут иметь полные сигнатуры, поэтому они
    всё равно удовлетворяют интерфейсу.
    */
    
  • [PR] Use serialize_precision for printing floats in var_dump() — Данное изменение повлияет на то, как будут отображаться float числа при выводе через var_dump() (0.1 + 0.2 === 0.30000000000000004):
    Скрытый текст
    
    // Было
    $sum = 0.1 + 0.2;
    var_dump($sum); // float(0.3)
    var_dump($sum == 0.3); // bool(false) WTF???
    
    // Станет
    $sum = 0.1 + 0.2;
    var_dump($sum); // float(0.30000000000000004)
    var_dump($sum == 0.3); // bool(false) Makes sense...
    

Инструменты


  • T-Regx/T-Regx — Библиотека с удобным интерфейсом для работы с регулярными выражениями. Прислал lex111.
  • vstelmakh/url-highlight — Библиотека для подсветки ссылок в тексте. Умеет находить ссылки без протокола (использует список доменов первого уровня). Есть расширение для twig и symfony bundle.
  • spiral/RoadRunner — Сервер приложений для PHP на Golang. Добавлен файл-вотчер и теперь воркеры перезагружаются автоматически.
  • tightenco/overload — Простая, но интересная реализация перегрузки методов через коллекцию замыканий.
  • rainbow-alex/phi — Альфа-версия парсера PHP на PHP. Альтернатива nikic/PHP-Parser, в которой предполагается решить пачку проблем парсера Никиты, связанных с сохранением пробелов и комментариев при модификации AST.
  • Калькулятор настроек php-fpm
  • ergebnis/environment-variables — Абстракции для работы с переменными окружения.

Symfony


  • ru Symfony 5. Быстрый старт — Свежую книгу от Фабьена теперь можно купить в русском переводе. Все деньги с продаж книги идут на развитие Symfony.
  • Неделя Symfony #686 (17-23 февраля 2020)
  • habr Как организовать скины в Symfony

Laravel


  • vladyslavstartsev/laravel-strict-coding-standard — Пара дополнительных правил для PHP_CodeSniffer для Laravel приложений.
  • thomasjohnkane/slow-query-notifier — Отправит уведомление при обнаружении слишком медленных запросов. Вводный пост.
  • beyondcode/laravel-server-timing — Хелпер для добавления Server-Timing заголовков, которые можно потом посмотреть на вкладке Сеть в dev tools браузера.
  • nunomaduro/laravel-mojito — Простенький пакет для тестирования вьюшек.
  • Основы кэширования в Laravel.
  • ru Руководство по Очередям и Задачам: Создаём простое аналитическое приложение, Подключения и настройки, Как запустить воркеры на продакшен-сервере.

Yii


  • Новости Yii 2020, выпуск 2 — Очень много обновлений в Yii 3.

Async PHP


  • Сергей Жук беседует с Marc Morera (автором DriftPHP) video о DBAL и ORM в ReactPHP.
  • driftphp/tiny-load-balancer — Крошечный лоадбалансер на ReactPHP.
  • habr Асинхронный PHP

Материалы для обучения


  • PHPUnit: Угроза безопасности? — О том, как старые версии PHPUnit могут привести к проблемам безопасности, если vendor доступен публично.
  • В какой момент PHP вызывает __destruct()?
  • О битовых масках для хранения флагов в PHP.
  • ru Чистый код на PHP — Принципы разработки ПО из книги Clean Code Роберта Мартина адаптированные для PHP.
  • habr Использование RabbitMQ вместе с MonsterMQ часть 1
  • ru Тест для PHP-разработчиков от Badoo — Перед прохождением можно посмотреть разбор задач прошлого теста. habr Оффер в Лондон за один день: как его получить и чем заняться после переезда.

Аудио/Видео


  • videohabr Что делать с легаси. Материалы с Badoo PHP Meetup #4
  • video Что будет в PhpStorm 2020.1 — Каждую неделю новый 5-минутный ролик.
  • video PHP для абсолютных новичков — 5 часов видеоуроков.
  • audio PHP Internals News podcast #40 — C Никитой Поповым о тройке принятых мелких RFC.
  • audio PHP Internals News podcast #41 — Со Steven Wade о предложении добавить магический __toArray().
  • audio The Undercover ElePHPant #8 — О тюнинге php-fpm с Arne Blankerts из thephp.cc. И блогпост с основными моментами.

Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.

Больше новостей и комментариев в Telegram-канале PHP Digest.

Прислать ссылку — Попробуем через GitHub.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 173

Источник: https://habr.com/ru/post/489662/


Интересные статьи

Интересные статьи

В этом году главная европейская конференция по Kubernetes — KubeCon + CloudNativeCon Europe 2020 — была виртуальной. Впрочем, такая смена формата не помешала нам выступить с давно зап...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
На этой неделе мы рассказываем про важные и интересные новости и статьи — “универсальные покупки”, единый магазин и платформу от Xiaomi, Huawei, Oppo и Vivo, про рисование муравьями и тех, кто иг...
Ваш сайт работает на 1С-Битрикс? Каждому клиенту вы даёте собственную скидку или назначаете персональную цену на товар? Со временем в вашей 1С сложилась непростая логика ценообразования и формирования...
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.