Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PSR-14 Event Dispatcher — официально перешёл в стадию ревью.
- PSD-12 Extended Code Style — Новый стандарт стиля кодирования расширяет и дополняет PSR-2 и призван заменить его. Тоже в стадии ревью.
- PHP 7.3.2
- PHP 7.2.15
- PHPUnit 8
PHP Internals
- Создана ветка PHP-7.4, а master репозитория PHP теперь нацелен на PHP 8.0. Это значит, что работа над PHP 8.0 уже стартовала, а PHP 7.4 будет разрабатываться параллельно. Так, в PHP 8 уже удалена целая пачка устаревших возможностей.
- [RFC] JIT — Старая идея с JIT в PHP наконец-то нашла реализацию благодаря усилиям Дмитрия Стогова. JIT реализован как независимая часть OPcache, и может быть включён/выключен даже в рантайме. В качестве целевой версии рассматривается PHP 8, но возможно включение уже в PHP 7.4 в виде экспериментальной отключенной по умолчанию фичи. По бенчмаркам Никиты Попова JIT даёт прирост 30% для PHP-Parser и около 5% для amphp/http-server. На данный момент нет поддержки Windows, что вызывает споры в Internals.
А тем временем уже можно попробовать PHP+JIT с помощью Docker образов (спасибо @dmitrybalabka). Также в тему отличный пост о том, что значит JIT для пользователей PHP. - [RFC] Consistent type errors for internal functions — Еще один RFC от Никиты Попова. Предлагается сделать так, чтоб в PHP 8 все встроенные функции бросали TypeError когда переданы параметры неверного типа вместо ворнингов и возвращения
null
.Скрытый текстВместо:var_dump(strlen(new stdClass)); // Warning: strlen() expects parameter 1 to be string, object given // NULL
Будет:
declare(strict_types=1); var_dump(strlen(new stdClass)); // TypeError: strlen() expects parameter 1 to be string, object given
- [RFC] RFC Workflow & Voting (2019 update) — Попытка несколько ужесточить голосование по RFC и бюрократизировать процесс встретила бурю критики в Internals. Настолько, что появились альтернативные предложения. Свой же вариант Зеев Сураски пообещал переработать и учесть критику.
- [RFC] Weak References — Предлагается добавить класс
WeakReference
для реализации слабых ссылок, что позволит разработчику сохранить ссылку на объект, при этом не предотвращая его удаления сборщиком мусора. Это может быть особенно полезно для всякого рода кэшей. - [RFC] Allow void return type variance — Предложение реализовать возможность переопределять возвращаемый тип
void
в методах наследника. Появилось по следам изменения сигнатуры методаsetUp()
и нескольких других в PHPUnit 8.Скрытый текстclass Foo { function method1 (): void {} function method2 () {} } class Bar extends Foo { function method1 (): array { return []; } function method2 (): array { return []; } } class Baz extends Foo { function method1 () { return 42; } function method2 () { return 42; } }
- [RFC] Mixed typehint — А здесь предлагается добавить тайпхинт
mixed
. Это позволит указать, что функция может принимать (или возвращать) значения разных типов. - [RFC] Annotations 2.0 — Черновик предложения по полноценным аннотациям. Ранее уже были попытки реализовать простые аннотации и атрибуты. Тем временем можно использовать отличный плагин для аннотаций в PhpStorm.
Инструменты
- mnapoli/bref v0.3 — Инструмент для создания serverless PHP-приложений на AWS Lambda. В свежей версии убран хак с запуском через NodeJS. В качестве альтернативы можно использовать img2lambda.
- paragonie/ciphersweet — Быстрое шифрование для PHP-проектов с возможностью поиска по данным. Больше деталей в посте.
- phpdaily/php — Docker-образы дев-версий PHP, включая PHP 7.4 и PHP 8.
- immutablephp/immutable — Неизменяемые объекты-значения. Вводный блогпост.
- spatie/enum — Еще одна реализация перечисляемого типа для PHP.
- krakjoe/pcov — Драйвер для быстрого подсчета покрытия кода. Подробнее в посте.
- krakjoe/sandbox — Расширение позволяет запускать замыкание в песочнице. Больше деталей в блогпосте.
- akondas/php-grandmaster — Движок шахмат на PHP, с примером деплоя на AWS Lambda.
- railt/railt — Реализация GraphQL для PHP-приложений.
- SerafimArts/Properties — Реализация свойств в PHP на основе деклараций PHPDoc.
Symfony
- Неделя Symfony #632 (4-10 февраля 2019)
- Неделя Symfony #631 (28 января — 3 февраля 2019)
- О паре файлов, которых не хватает вашему Symfony-приложению: ide-twig.json и .phpstorm.meta.php.
- Создатель Symfony Fabien Potencier ответил на вопросы пользователей о фреймворке, PHP, и прочем.
- Сериализация данных на уровне базы
Laravel
- brendt/aggregate.stitcher.io — Хороший пример приложения на Laravel.
- beyondcode/laravel-favicon — Генерирует фавиконку на основе установок окружения, чтоб не путать дев и прод.
- 11 вспомогательных функций для Laravel
- Подкаст от Тейлора Laravel Snippet #4 и #5
- Видеозаписи Laracon EU 2018
Yii
- Yii 2.0.16
- Yii development notes #26
- iiifx-production/yii2-autocomplete-helper — Автодополнения в IDE для пользовательских компонентов Yii 2.
- Неочевидный RabbitMQ в Yii2 или почему RabbitMQ пишет во все очереди сразу.
Async PHP
- reactphp/event-loop v1.1.0 — Добавлена поддержка libuv (ext-uv), обработка PCNTL-сигналов, использование
hrtime()
на PHP 7.3+. - shuchkin/react-smtp-client — Асинхронный SMTP-клиент для отправки почты с помощью ReactPHP.
- Быстрый веб-скрапинг на ReactPHP #3: Скачиваем изображения
CMS
Материалы для обучения
- Выявление багов с помощью @template — О поддержке дженериков в статических анализаторах vimeo/psalm, и phan.
- Контекстные менеджеры в PHP — Интересная идея реализовать аналог контекстных менеджеров из Python с помощью генераторов в PHP.
- Переход с Go обратно на PHP
- Видеозаписи Onliner PHP Meetup #3
- PHP для начинающих. Сессия
- Composer для самых маленьких
- Что почитать по PHP на русском?
- BotMan знакомство
- Паттерн Интерактор (Interactor, Operation)
- Liveprof покажет, когда и почему менялась производительность вашего PHP-приложения
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 148
Комментарии (14)
Temmokan
11.02.2019 09:03Праздное любопытство: почему конечную дату обзоров вы ставите в дату публикации (т.е., день, который ещё и не начался толком)?
Compolomus
11.02.2019 11:21+3* mbstring.func_overload выпилят, привет Битрикс =)
Jouretz
11.02.2019 14:12Вот бы ещё у битрикса не было возможности заявлять, что они не поддерживают версии выше 7.1, т.к. они «не оттестированны».
А с их подходом ещё лет пять можно с mbstring провозиться.
galliard
11.02.2019 12:44RFC] Consistent type errors for internal functions — Еще один RFC от Никиты Попова. Предлагается сделать так, чтоб в PHP 8 все встроенные функции бросали TypeError когда переданы параметры неверного типа вместо ворнингов и возвращения null.
Это полумера. Нужно, чтобы при любой ошибке бросался какой-нибудь exception, а не возвращался null или false.
SerafimArts/Properties — Реализация свойств в PHP на основе деклараций PHPDoc.
Серьезно?)SerafimArts
11.02.2019 13:20Серьезно?)
Ну… Вообще этот проект был больше «фор-фан», но кто-то забыл в ридми дописать «here be dragons»
mariner
11.02.2019 18:51хы, они продолжают цирк с названиями. везде Exception, а тут хотят добавить TypeError.
SerafimArts
11.02.2019 18:55Либо я чего-то не понимаю в этом тезисе, либо вы не в курсе как именуются системные исключения в PHP.
Можете пояснить, если я всё же не правильно вас понял: Вы считаете, что это какое-то новое исключение, а не переиспользование уже существующего, которое было добавлено 4ре года назад, вместо вырезанных из языка ошибок, перехватываемых через error_handler?
SerafimArts
11.02.2019 13:26railt/railt — Реализация GraphQL для PHP-приложений.
Пользуясь случаем, хоть там и стоит релизная циферка, но она скорее для тех, кто уже активно пользуется этим. Чтобы на мастер не завязываться. Я бы пока воздержался от использования в продакшене пока документации и 80%+ коверейджа нету.
glebovgin
11.02.2019 19:05Коллеги, не пытаюсь пинать полудохлого коня, просто хотел узнать мнения — как считаете, у Codeigniter есть вообще будущее?
MTonly
В PHP 7.3.2 устранена несовместимость 7.3.x с Денвером, связанная с раскрытием в
__DIR__
,__FILE__
иrealpath()
истинных физических путей к файлам и папкам на виртуальных дисках, созданных средствамиsubst
в Windows.witka
ох, денвер еще жив
coderun
Сам в шоке. Кто еще им пользуется в век WSL
MTonly
Держите нас в курсе.
MTonly
Можно сформулировать иначе: «устранена несовместимость 7.3.x с 7.2.x, связанная с […]».