PHP-Дайджест № 181 (18 мая – 1 июня 2020)
Фото Erika Heidi
Свежая подборка со ссылками на новости и материалы. В выпуске: 3 новых и 4 принятых RFC предложения для PHP 8, включая объявление свойств в конструкторе, о блокировке PHP-ML из-за плагиата, почему разработчики ненавидят PHP, порция полезных инструментов, видео и многое другое.
Приятного чтения!
Новости и релизы
- Репозиторий php-ai/php-ml был заблокирован из-за плагиата — Конфликт между авторами двух библиотек машинного обучения для PHP RubixML и PHP-ML, судя по всему, имел давнюю историю. И перешел в активную фазу из-за того, что автор PHP-ML был уличен в копировании нескольких файлов из RubixML.
Автор PHP-ML опубликовал свою версию событий с подробной хронологией, а также перенес код PHP-ML на GitLab gitlab.com/php-ai/php-ml.
В комментариях к посту указали на пачку файлов, которые ранее были явно скопированы в обратную сторону: из PHP-ML в RubixML. Так что, кто прав — каждый сделает вывод для себя сам, но если вдруг вы получили DCMA-предупреждение, то действовать стоит очень быстро, иначе репозиторий удалят через 24 часа.
Кстати, на весь код из ответов на StackOverflow распространяется лицензия CC BY-SA 4.0. Значит ли это, что если вы использовали примеры кода, то ваш код должен быть под этой же лицензией?
¯\_(ツ)_/¯
- Статистика версий PHP — 2020.1 — Традиционная подборка статистики на основе данных, которые Composer отправляет при подключении к packagist.org. 78% клиентов использует поддерживаемые версии PHP, а доля PHP 5 составляет менее 7%. При этом доля пакетов, у которых в требованиях указана PHP 5, составляет 38%.
- В PHP 7.4.6 есть ошибка при выполнении
yield from
для обычного массива. Если вы активно используете генераторы, эту версию лучше пропустить. - Стартовала программа раннего доступа (EAP) PhpStorm 2020.2 — В первом билде можно пощупать полную поддержку пул-реквестов GitHub, новый виджет инспекций, и переработанный анализ потока выполнения PHP. Как и всегда, EAP-версию можно использовать бесплатно.
- Почему разработчики ненавидят PHP.
- PHP fwdays | Speacial Edition, 6 июня — Дополнительное онлайн-мероприятие от fwdays со звездным составом: Jordi Boggiano, Sebastian Bergmann, Marco Pivetta, Nikita Popov.
Скидка 15% по коду: phpdigest_fwdays.
PHP Internals
- [RFC] Constructor Property Promotion — Предложение принято и в PHP 8 можно будет объявлять свойства прямо в конструкторе Скрытый текстПохожая возможность есть в Hack, TypeScript, Kotlin, Scala. Посмотрим, как приживется в PHP. В комбинации с атрибутами выглядит интересно:
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 Foo { public function __construct(
> public int $prop, ) {} } - [RFC] Mixed Type v2 — Принят RFC, который добавит тип
mixed
в PHP 8. Подробнее о плюсах на канале PHP Digest или в посте оновом пcевдотипе mixed
. - [RFC] Always available JSON extension — Начиная с PHP 8 расширение JSON будет всегда доступно без возможности исключить из сборки.
- [RFC] non-capturing catches — В PHP 8 можно будет не указывать переменную в блоке
catch
:try { changeImportantData(); } catch (PermissionException) { echo "You don't have permission to do this"; }
- [RFC] Error backtraces — В отличие от исключений, ошибки в PHP не предоставляют трейса. Предлагается это исправить. Поскольку для всех ошибок кроме собственно
Error
трейсы можно реализовать в кастомном обработчике, то, вероятно, эта возможность и будет добавлена только дляError
. - [RFC] Match expression v2 — Обновленное предложение по вводу нового выражения
match
, которое работает какswitch
, но при этом имеет проверку типа и возможность возвращать значение.Скрытый текстПосле неудачного голосования была убрана возможность использовать блоки.echo match (1) { 0 => 'Foo', 1 => 'Bar', 2 => 'Baz', }; //> Bar
- [RFC] Attribute Amendments — Несколько дополнений к уже принятым атрибутам: возможность группировать
<
, переименовать> PhpAttribute
в простоAttribute
. Также добавить валидацию на целевую сущность, чтоб можно было указать, что конкретный атрибут можно вешать только на класс/метод/свойство. Кроме того, сейчас один и тот же атрибут можно вешать несколько раз. Предлагается по умолчанию запретить повторения, а если они нужны, то атрибут надо будет объявить еще с атрибутомRepeatableAttribute
.
Инструменты
- pestphp/pest — Обертка над PHPUnit, которая позволяет писать тесты в более простом виде. Есть документация и много видеороликов. Вдохновлена facebook/jest.
- Moxio/sqlite-extended-api — Реальная демонстрация работы lisachenko/z-engine: пакет предоставляет пару методов API SQLite, которые недоступны в стандартных драйверах PHP.
- rashidlaasri/travel — Обёртка над Carbon, которая помогает «путешествовать» к определённой дате, что может быть полезно для тестов,
- FriendsOfPHP/pickle — Менеджер PECL-расширений, который совместим с Composer. Идея отличная, но предыдущий релиз был в 2015 году и вот вышло свежее (минорное) обновление. Будем надеяться, что проект оживет.
- webdevium/processes — Небольшой пакет для получения списка выполняемых процессов в системе. Работает на любой платформе Windows/*nix.
- dsuurlant/response2schema — Генерирует спеку OpenAPI на основе JSON-объекта.
- php-casbin/php-casbin — Библиотека авторизации, которая поддерживает модели управления доступом ACL, RBAC, ABAC.
Symfony
Laravel
Async PHP
Материалы для обучения
Аудио/Видео
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 180