- PVSM.RU - https://www.pvsm.ru -

PHP-Дайджест № 171 (1 – 13 января 2020)

PHP-Дайджест № 171 (1 – 13 января 2020) - 1

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

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

PHP-Дайджест № 171 (1 – 13 января 2020) - 2 PHP Internals

  • [RFC] Variable Syntax Tweaks [1] — В PHP 7 был исправлен ряд неконсистентностей в синтаксисе переменных Uniform Variable Syntax RFC [2]. Некоторые упущения, связанные с разыменованием, предлагается доисправить в PHP 8.
  • [RFC] Static return type [3] — Ключевое слово static в контексте декларации типа означает позднее статическое связывание [4]. Предлагается сделать возможным его использование в качестве возвращаемого типа методов. Удобно в текучих интерфейсах или статических конструкторах.
    Скрытый текст

    class Test {
        public function doWhatever(): static {
            // Do whatever.
            return $this;
        }
    }
    

    Для свойств класса и параметров методов это не имеет смысла и работать не будет.

  • [RFC] Allow ::class on objects [5] — В PHP 8 предлагается сделать возможным получение полного имени класса из объекта $object::class по аналогии с тем, как это работает сейчас FooBar::class.
  • [RFC] «use global functions/consts» statement [6] — Если функция или константа используются без префикса, то PHP попытается сначала найти их в текущем неймспейсе, а затем в глобальном. Автор предлагает добавить директивы use global functions; и use global consts;, которые заставят интерпретатор функции и константы без префиксов по-умолчанию искать в глобальном пространстве.
  • [RFC] Weak maps [7] — Предложение принято и WeakMaps [8] будут доступны в PHP 8.

    Несколько изменений доступны в виде пул-реквестов:

  • [PR] Deprecate required param after optional [9] — В данном реализовано предупреждение об использовании обязательного параметра после опционального в сигнатуре функции:
    function test(FooBar $param = null, $param2)

    Раньше это могло иметь смысл, но с nullable типами можно написать function test(?FooBar $param, $param2).

  • [PR] Check abstract method signatures coming from traits [10] — Сигнатуры абстрактных методов из трейтов не валидируются на соответствие реализации. То есть вот такой код сейчас работает без ошибок:
    Скрытый текст

    trait T {
        abstract function neededByTheTrait(int $a, string $b);
    }
    class C {
        use T;
        function neededByTheTrait(array $a, object $b) {}
    }
    

    Пул-реквест исправляет это поведение.

  • [PR] Ensure correct signatures for PHP magic methods [11] — А в этом PR, реализована проверка сигнатур магических методов. На данный момент она есть только для __toString() и __clone(), а вот такое, например, работает без ошибок:
    Скрытый текст

    class Foo {
    	function __get(int $name) {}
    }
    
    (new Foo)->{42};
    

PHP-Дайджест № 171 (1 – 13 января 2020) - 3 Инструменты

  • nikic/PHP-Fuzzer [12] — Экспериментальный фазер для PHP-библиотек от Никиты Попова. Инструмент генерирует случайные входные данные для функций и может помочь найти неожиданные баги.
  • lukanetconsult/network-address-types [13] — Набор типов для представления сетевых адресов в PHP.
  • carlosas/phpat [14] — Статический анализатор для тестирования архитектуры. Предоставляет набор селекторов [15] и правил [16].
  • maglnet/ComposerRequireChecker [17] — Инструмент проверит, что все используемые зависимости вашего проекта указаны явно в composer.json.
  • php-service-bus/service-bus [18] — Фреймворк на базе Amphp [19] для построения приложений с использованием паттернов Saga, CQRS, EventSourcing, Message Bus.
  • tigitz/php-spellchecker [20] — Обёртка для проверки текста на ошибки набором разных спелл-чекеров.
  • franzliedke/studio [21] — Инструмент для разработки Composer пакетов при одновременном использовании.

PHP-Дайджест № 171 (1 – 13 января 2020) - 4 Symfony

PHP-Дайджест № 171 (1 – 13 января 2020) - 5 Laravel

PHP-Дайджест № 171 (1 – 13 января 2020) - 11 Zend / Laminas

CMS

PHP-Дайджест № 171 (1 – 13 января 2020) - 14 Материалы для обучения

PHP-Дайджест № 171 (1 – 13 января 2020) - 19 Аудио/Видео

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

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

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

Прислать ссылку [63]
Поиск ссылок по всем дайджестам [64]
Предыдущий выпуск: PHP-Дайджест № 170 [65]

Автор: Роман Пронский

Источник [66]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/342963

Ссылки в тексте:

[1] [RFC] Variable Syntax Tweaks: https://wiki.php.net/rfc/variable_syntax_tweaks

[2] Uniform Variable Syntax RFC: https://wiki.php.net/rfc/uniform_variable_syntax

[3] [RFC] Static return type: https://wiki.php.net/rfc/static_return_type

[4] позднее статическое связывание: https://www.php.net/manual/ru/language.oop5.late-static-bindings.php

[5] [RFC] Allow ::class on objects: https://wiki.php.net/rfc/class_name_literal_on_object

[6] [RFC] «use global functions/consts» statement: https://wiki.php.net/rfc/use_global_elements

[7] [RFC] Weak maps: https://wiki.php.net/rfc/weak_maps

[8] WeakMaps: https://t.me/phpdigest/104

[9] [PR] Deprecate required param after optional: https://github.com/php/php-src/pull/5067

[10] [PR] Check abstract method signatures coming from traits: https://github.com/php/php-src/pull/5068

[11] [PR] Ensure correct signatures for PHP magic methods: https://github.com/php/php-src/pull/4177

[12] nikic/PHP-Fuzzer: https://github.com/nikic/PHP-Fuzzer

[13] lukanetconsult/network-address-types: https://github.com/lukanetconsult/network-address-types

[14] carlosas/phpat: https://github.com/carlosas/phpat

[15] селекторов: https://github.com/carlosas/phpat/blob/master/doc/SELECTORS.md

[16] правил: https://github.com/carlosas/phpat/blob/master/doc/RULE_TYPES.md

[17] maglnet/ComposerRequireChecker: https://github.com/maglnet/ComposerRequireChecker

[18] php-service-bus/service-bus: https://github.com/php-service-bus/service-bus

[19] Amphp: https://github.com/amphp

[20] tigitz/php-spellchecker: https://github.com/tigitz/php-spellchecker

[21] franzliedke/studio: https://github.com/franzliedke/studio

[22] Symfony стал фреймворком с наибольшим числом контрибьюторов в 2019: https://symfony.com/blog/symfony-was-the-backend-framework-with-the-most-contributors-in-2019

[23] Обзор 2010х Symfony: https://symfony.com/blog/symfony-2010s-decade-in-review

[24] Неделя Symfony #680 (6-12 Января 2020): https://symfony.com/blog/a-week-of-symfony-680-6-12-january-2020

[25] laravel/airlock: https://github.com/laravel/airlock

[26] пост об использовании: https://medium.com/@JillevdWeerd/app-authentication-with-laravel-airlock-36e3d2027994

[27] Используем GitHub Actions для запуска тестов Laravel-проекта: https://freek.dev/1546-using-github-actions-to-run-the-tests-of-laravel-projects-and-packages

[28] Как избежать больших сигнатур функций с помощью отложенных объектов: https://freek.dev/1545-how-to-avoid-large-function-signatures-by-using-pending-objects

[29] Руководства по ролям и правам в Laravel: https://laravel.demiart.ru/guide-to-roles-and-permissions/

[30] Как разделить роли в проекте на Laravel: обзорное сравнение RBAC-пакетов: https://habr.com/ru/company/simbirsoft/blog/481796/

[31] Laravel. Локализованный роутинг: https://habr.com/ru/post/481726/

[32] Laravel Snippet #21: https://blog.laravel.com/laravel-snippet-21-artisan-inspire-vapor-multi-domain-support-laravel-airlock

[33] Новости Laminas: https://getlaminas.org/blog/2019-12-31-out-with-the-old-in-with-the-new.html

[34] https://github.com/laminas: https://github.com/laminas

[35] Друпал-дайджест — 2019/декабрь: https://habr.com/ru/post/482922/

[36] Видеокурс по Magento 2 для новичков: https://magemastery.net/courses/magento-2-beginner

[37] Правила работы с динамическими массивами и классами коллекций: https://matthiasnoback.nl/2020/01/rules-for-working-with-arrays-and-custom-collection-classes-in-php/

[38] Как разрабатывать и отлаживать PHP-приложения в Kubernetes: https://okteto.com/blog/how-to-develop-php-apps-in-kubernetes/

[39] О проблемах хеширования паролей на стороне сервера: https://blog.usejournal.com/hashing-passwords-on-the-server-side-a-dead-end-82669ee0253a

[40] Как сломать целую экосистему, опубликовав релиз: https://medium.com/@alcaeus/how-to-break-an-entire-ecosystem-by-publishing-a-release-b6aaab2b8aaa

[41] doctrine/persistence: https://github.com/doctrine/persistence

[42] как задепрекейтить тип в PHP: https://dev.to/greg0ire/how-to-deprecate-a-type-in-php-48cf

[43] Бенчмарки PHP 5.6 – 7.4 : https://kinsta.com/blog/php-benchmarks/

[44] Бенчмарки предзагрузки в PHP 7.4: https://stitcher.io/blog/php-preload-benchmarks

[45] Google хоронит расширение PHP IMAP: https://habr.com/ru/post/481786/

[46] Перевод PHP бэкенда на шину Redis streams: https://habr.com/ru/post/483584/

[47] Решение типовых проблем с json_encode: https://habr.com/ru/post/483492/

[48] Зачем ограничивать наследование с помощью final?: https://habr.com/ru/post/482154/

[49] SDCast #111: В гостях Сергей Жук, разработчик из Skyeng: https://sdcast.ksdaemon.ru/2019/12/sdcast-111/

[50] The Undercover ElePHPant #5: https://undercover-elephpant.com/episodes/integrating-with-third-party-apis-with-nils-adermann

[51] Nils Adermann: https://twitter.com/naderman

[52] Основные моменты: https://tideways.com/profiler/blog/reliable-integration-with-third-party-apis-in-php

[53] Рефакторинг сложных условных выражений: https://vimeo.com/381650670

[54] Как запускать тесты PHPUnit в PhpStorm: https://www.youtube.com/watch?v=7YnYz_SjVbI

[55] блог поста: https://matthewsetter.com/run-tests-in-phpstorm/

[56] Про Single Responsibility: https://www.youtube.com/watch?v=Q61TtJlWvfE

[57] Anna Filina: https://twitter.com/afilina

[58] The PHP Song: https://www.youtube.com/watch?v=V5jHHYFqt9o

[59] личку: https://habrahabr.ru/conversations/pronskiy/

[60] почту: mailto:roman@pronskiy.com

[61] твиттер: https://twitter.com/pronskiy

[62] PHP Digest: https://t.me/phpdigest

[63] Прислать ссылку: https://bit.ly/php-digest-add-link

[64] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[65] Предыдущий выпуск: PHP-Дайджест № 170: https://habr.com/ru/post/481564/

[66] Источник: https://habr.com/ru/post/483684/?utm_source=habrahabr&utm_medium=rss&utm_campaign=483684