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

PHP-Дайджест № 181 (18 мая – 1 июня 2020)

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 1

Фото Erika Heidi [1]

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

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

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 2 Новости и релизы

  • Репозиторий php-ai/php-ml был заблокирован из-за плагиата — Конфликт между авторами двух библиотек машинного обучения для PHP RubixML [2] и PHP-ML, судя по всему, имел давнюю историю. И перешел в активную фазу из-за того, что автор PHP-ML был уличен [3] в копировании нескольких файлов из RubixML.

    Автор PHP-ML опубликовал свою версию событий [4] с подробной хронологией, а также перенес код PHP-ML на GitLab gitlab.com/php-ai/php-ml [5].

    В комментариях к посту указали на пачку файлов [6], которые ранее были явно скопированы в обратную сторону: из PHP-ML в RubixML. Так что, кто прав – каждый сделает вывод для себя сам, но если вдруг вы получили DMCA-предупреждение, то действовать стоит очень быстро, иначе репозиторий удалят через 24 часа.

    Кстати, на весь код из ответов на StackOverflow [7] распространяется лицензия CC BY-SA 4.0 [8]. Значит ли это, что если вы использовали примеры кода, то ваш код должен быть под этой же лицензией? ¯_(ツ)_/¯

  • Статистика версий PHP – 2020.1 [9] — Традиционная подборка статистики на основе данных, которые Composer отправляет при подключении к packagist.org. 78% клиентов использует поддерживаемые версии PHP, а доля PHP 5 составляет менее 7%. При этом доля пакетов, у которых в требованиях указана PHP 5, составляет 38%.
  • В PHP 7.4.6 есть ошибка [10] при выполнении yield from для обычного массива. Если вы активно используете генераторы, эту версию лучше пропустить.
  • Стартовала программа раннего доступа (EAP) PhpStorm 2020.2 [11] — В первом билде можно пощупать полную поддержку пул-реквестов GitHub, новый виджет инспекций, и переработанный анализ потока выполнения PHP. Как и всегда, EAP-версию можно использовать бесплатно.
  • Почему разработчики ненавидят PHP [12].
  • PHP fwdays | Speacial Edition [13], 6 июня — Дополнительное онлайн-мероприятие от fwdays со звездным составом: Jordi Boggiano, Sebastian Bergmann, Marco Pivetta, Nikita Popov.
    Скидка 15% по коду: phpdigest_fwdays.

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 3 PHP Internals

  • check [RFC] Constructor Property Promotion [14] — Предложение принято и в PHP 8 можно будет объявлять свойства прямо в конструкторе
    Скрытый текст

    // Было
    class Point {
        public float $x;
        public float $y;
        public float $z;
    
        public function __construct(
            float $x = 0.0,
            float $y = 0.0,
            float $z = 0.0,
        ) {
            $this->x = $x;
            $this->y = $y;
            $this->z = $z;
        }
    }
    
    // Стало
    class Point {
        public function __construct(
            public float $x = 0.0,
            public float $y = 0.0,
            public float $z = 0.0,
        ) {}
    }
    

    Похожая возможность есть в Hack, TypeScript, Kotlin, Scala. Посмотрим, как приживется в PHP. В комбинации с атрибутами выглядит интересно:

    class Foo {
        public function __construct(
            <<ExampleAttribute>>
            public int $prop,
        ) {}
    }
    
  • check [RFC] Mixed Type v2 [15] — Принят RFC, который добавит тип mixed в PHP 8. Подробнее о плюсах на канале PHP Digest [16] или в посте о новом пcевдотипе mixed [17].
  • check [RFC] Always available JSON extension [18] — Начиная с PHP 8 расширение JSON будет всегда доступно без возможности исключить из сборки.
  • check [RFC] non-capturing catches [19] — В PHP 8 можно будет не указывать переменную в блоке catch:
    try {
        changeImportantData();
    } catch (PermissionException) {
        echo "You don't have permission to do this";
    }
    
  • [RFC] Error backtraces [20] — В отличие от исключений, ошибки в PHP не предоставляют трейса. Предлагается это исправить. Поскольку для всех ошибок кроме собственно Error трейсы можно реализовать в кастомном обработчике, то, вероятно, эта возможность и будет добавлена только для Error.
  • [RFC] Match expression v2 [21] — Обновленное предложение по вводу нового выражения match, которое работает как switch, но при этом имеет проверку типа и возможность возвращать значение.
    Скрытый текст

    echo match (1) {
        0 => 'Foo',
        1 => 'Bar',
        2 => 'Baz',
    };
    //> Bar
    

    После неудачного голосования была убрана возможность использовать блоки.

  • [RFC] Attribute Amendments [22] — Несколько дополнений к уже принятым атрибутам: возможность группировать <<Attr1, Attr2>>, переименовать PhpAttribute в просто Attribute. Также добавить валидацию на целевую сущность, чтоб можно было указать, что конкретный атрибут можно вешать только на класс/метод/свойство. Кроме того, сейчас один и тот же атрибут можно вешать несколько раз. Предлагается по умолчанию запретить повторения, а если они нужны, то атрибут надо будет объявить еще с атрибутом RepeatableAttribute.

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 8 Инструменты

  • pestphp/pest [23] — Обертка над PHPUnit, которая позволяет писать тесты в более простом виде. Есть документация [24] и много видеороликов [25]. Вдохновлена facebook/jest [26].
  • Moxio/sqlite-extended-api [27] — Реальная демонстрация работы lisachenko/z-engine [28]: пакет предоставляет пару методов API SQLite, которые недоступны в стандартных драйверах PHP.
  • rashidlaasri/travel [29] — Обёртка над Carbon, которая помогает «путешествовать» к определённой дате, что может быть полезно для тестов,
  • FriendsOfPHP/pickle [30] — Менеджер PECL-расширений, который совместим с Composer. Идея отличная, но предыдущий релиз был в 2015 году и вот вышло свежее (минорное) обновление. Будем надеяться, что проект оживет.
  • webdevium/processes [31] — Небольшой пакет для получения списка выполняемых процессов в системе. Работает на любой платформе Windows/*nix.
  • dsuurlant/response2schema [32] — Генерирует спеку OpenAPI на основе JSON-объекта.
  • php-casbin/php-casbin [33] — Библиотека авторизации, которая поддерживает модели управления доступом ACL, RBAC, ABAC.

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 9 Symfony

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 10 Laravel

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 13 Async PHP

  • clue/reactphp-zlib [47] — Потоковое сжатие и распаковка GZIP, ZLIB и DEFLATE с помощью ReactPHP. Вводный блогпост [48].

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

PHP-Дайджест № 181 (18 мая – 1 июня 2020) - 18 Аудио/Видео

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

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

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

Прислать ссылку [71]
Поиск ссылок по всем дайджестам [72]
Предыдущий выпуск: PHP-Дайджест № 180 [73]

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

Источник [74]


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

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

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

[1] Erika Heidi: https://twitter.com/erikaheidi

[2] RubixML: https://github.com/RubixML/RubixML

[3] уличен: http://archive.vn/d0blx

[4] свою версию событий: https://arkadiuszkondas.com/dmca-php-ml-and-copyright-boundaries/

[5] gitlab.com/php-ai/php-ml: https://gitlab.com/php-ai/php-ml

[6] пачку файлов: https://arkadiuszkondas.com/dmca-php-ml-and-copyright-boundaries/#comment-4930849884

[7] ответов на StackOverflow: https://stackoverflow.com/help/licensing

[8] CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/

[9] Статистика версий PHP – 2020.1: https://blog.packagist.com/php-versions-stats-2020-1-edition/

[10] В PHP 7.4.6 есть ошибка: https://twitter.com/nikita_ppv/status/1264857231167807489

[11] Стартовала программа раннего доступа (EAP) PhpStorm 2020.2 : https://blog.jetbrains.com/phpstorm/2020/05/phpstorm-2020-2-early-access-program-is-now-open/

[12] Почему разработчики ненавидят PHP: https://www.jesuisundev.com/en/why-developers-hate-php/

[13] PHP fwdays | Speacial Edition: https://fwdays.com/en/event/php-fwdays-special-edition

[14] [RFC] Constructor Property Promotion: https://wiki.php.net/rfc/constructor_promotion

[15] [RFC] Mixed Type v2: https://wiki.php.net/rfc/mixed_type_v2

[16] канале PHP Digest: https://t.me/phpdigest/147

[17] новом пcевдотипе mixed: https://php.watch/versions/8.0/mixed-type

[18] [RFC] Always available JSON extension: https://wiki.php.net/rfc/always_enable_json

[19] [RFC] non-capturing catches: https://wiki.php.net/rfc/non-capturing_catches

[20] [RFC] Error backtraces: https://wiki.php.net/rfc/error_backtraces

[21] [RFC] Match expression v2: https://wiki.php.net/rfc/match_expression_v2

[22] [RFC] Attribute Amendments: https://wiki.php.net/rfc/attribute_amendments

[23] pestphp/pest: https://github.com/pestphp/pest

[24] документация: https://pestphp.com/

[25] видеороликов: https://www.youtube.com/playlist?list=PLNXrjfSe7qHncCyQYOqJBTsTbYPotMaZ8

[26] facebook/jest: https://github.com/facebook/jest

[27] Moxio/sqlite-extended-api: https://github.com/Moxio/sqlite-extended-api

[28] lisachenko/z-engine: https://github.com/lisachenko/z-engine

[29] rashidlaasri/travel: https://github.com/rashidlaasri/travel

[30] FriendsOfPHP/pickle: https://github.com/FriendsOfPHP/pickle

[31] webdevium/processes: https://github.com/webdevium/processes

[32] dsuurlant/response2schema: https://github.com/dsuurlant/response2schema

[33] php-casbin/php-casbin: https://github.com/php-casbin/php-casbin

[34] Symfony 5.1: https://symfony.com/blog/symfony-5-1-curated-new-features

[35] заменили: https://github.com/symfony/symfony/pull/36876/

[36] волну обсуждений: https://twitter.com/nicolasgrekas/status/1263023258938548225

[37] Неделя Symfony #700 (25-31 мая 2020): https://symfony.com/blog/a-week-of-symfony-700-25-31-may-2020

[38] spatie/laravel-multitenancy: https://github.com/spatie/laravel-multitenancy/

[39] блогпост: https://freek.dev/1661-an-unopinionated-package-to-make-laravel-apps-tenant-aware

[40] Стрим: https://www.youtube.com/watch?v=1bucfsyAZtI

[41] spiral/roadrunner-laravel: https://github.com/spiral/roadrunner-laravel

[42] RoadRunner: https://github.com/spiral/roadrunner

[43] Избегаем наследования в Laravel: https://jasonmccreary.me/articles/avoiding-inheritance-laravel/

[44] Laravel Livewire — Камень, ножницы, бумага: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq

[45] Пятиминутки PHP: https://5minphp.ru/

[46] Laravel Livewire: https://github.com/livewire/livewire

[47] clue/reactphp-zlib: https://github.com/clue/reactphp-zlib

[48] блогпост: https://clue.engineering/2020/introducing-reactphp-zlib

[49] Что нового в PHP 8: https://kinsta.com/blog/php-8/

[50] Обзор атрибутов в PHP 8: https://php.watch/articles/php-attributes

[51] PHP 8 в восьми кусочках кода: https://habr.com/ru/post/504356/

[52] PHP 7.4 в семи кусках кода: https://stitcher.io/blog/php-74-in-7-code-blocks

[53] Принцип подстановки Лисков в PHP: https://php.watch/articles/php-lsp

[54] О фантомных типах: http://marcosh.github.io/post/2020/05/26/phantom-types-in-php.html

[55] Как лучше делать имена для событий:: https://www.tomasvotruba.com/blog/2020/05/25/the-bulletproof-event-naming-for-symfony-event-dispatcher/

[56] Экспорт в Excel просто, быстро и красиво: https://medium.com/phpyh/%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82-%D0%B2-excel-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE-%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE-%D0%B8-%D0%BA%D1%80%D0%B0%D1%81%D0%B8%D0%B2%D0%BE-e199b8157b8a

[57] Чистая архитектура на PHP. Как её измерять и контролировать?: https://habr.com/ru/post/504590/

[58] PHP Internals News #55: https://phpinternals.news/55

[59] Ignace Nyamagana Butera: https://twitter.com/nyamsprod

[60] PHP Internals News #54: https://phpinternals.news/54

[61] Gabriel Caruso: https://twitter.com/carusogabriel

[62] Ensure correct signatures of magic methods: https://wiki.php.net/rfc/magic-methods-signature

[63] Между скобок № 8: https://soundcloud.com/between-braces/8-oleg-sklyarov-pro-nastavnichestvo

[64] PHP + Vulkan: https://www.youtube.com/watch?v=v6ueRknSqc0&list=PLDI5V3o4oKBXOpbAijmk1fjz-h7OBZbqj

[65] SerafimArts: https://habr.com/ru/users/serafimarts/

[66] 3-й онлайн PHP-митап: https://www.youtube.com/watch?v=ZYMEb_30kuo

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

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

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

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

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

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

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

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