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

Фото: Grégoire Gaonach [1]
Свежая подборка со ссылками на новости и материалы. В выпуске: Объекты в инициализаторах, неймспейсы для расширений, и другие RFC предложения для PHP 8.1. Обновлен PSR-11, предложен PSR ClockInterface. Порция полезных инструментов, видео, подкасты, статьи, и PHP Дайджест Live в 20:00 МСК.
Приятного чтения!
В черновике следующий вариант:
namespace PsrClock;
interface ClockInterface
{
/**
* Returns the current time as a DateTimeImmutable Object
*/
public function now(): DateTimeImmutable;
}
Никита Попов предлагает сделать возможным использовать объекты в качестве дефолтных значений свойств, параметров, а также для любых констант и статических переменных.
static $x = new Foo();
const C = new Foo();
#[AnAttribute(new Foo())]
class Test {
public const C = new Foo();
public static $prop = new Foo();
public $prop = new Foo();
public function __construct(
private Logger $logger = new NullLogger()
) {}
}
function test($param = new Foo()) {}
Пока предложение ограничивается только оператором new, но реализация позволяет в будущем расширить для любых выражений.
Документ содержит много подробностей и нюансов. Например, как работает рефлексия, трейты, анонимные классы, использование в атрибутах для решения проблемы вложенности, и прочее. Рассмотрим подробнее на стриме PHP Дайджест Live [13].
В данном RFC предлагается отказаться от префиксов вендоров, в том числе PHP. А неймспейсами должны стать имена расширений. То есть класс OpenSSLCertificate станет OpenSSLCertificate.
Пока правда, это касается только новых символов, а миграция существующих в рамках этого RFC не затрагивается. Но в примерах приведены возможные трансформации:
str_contains() -> Stringcontains()
in_array() -> Arraycontains().
Звучит как идея для PHP 9.
RFC предлагает сделать единственным набор статических переменных для метода, независимо от того наследуется он или нет.
class A {
public static function counter() {
static $i = 0;
return ++$i;
}
}
class B extends A {}
var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(3)
var_dump(B::counter()); // int(4)
Среди голосовавших против трое мейнтенеров Swoole. Они считают, что в Swoole уже пройден весь путь по асинхронному PHP, а файберы — это попытка начать заново, и их добавление не несет пользы без других компонентов.
Также против голосовал Joe Watkins, так как по его мнению [18] файберы не обеспечивают использование по полной всем тем, что сегодня может предложить хард/софт. В то время как расширение krakjoe/parallel [19] вполне могло бы.
Здравое зерно в этих рассуждениях есть, и тем не менее, файберы — реальный шаг в сторону асинхронных возможностей, который не противоречит ни Swoole ни parallel.
noreturn.
Такой тип указывает на то, что функция либо всегда бросает исключение либо завершает выполнение, то есть вызывает exit(), die(), trigger_error().
function redirect(string $uri): noreturn {
header('Location: ' . $uri);
exit();
}
function redirectToLoginPage(): noreturn {
redirect('/login');
}
Подобный тип есть в Hack, в Python, уже давно используется в самих Psalm, PHPStan и в PhpStorm в виде атрибута #[NoReturn] [21] или через exitpoint в .phpstormmeta.php [22].
Сейчас можно получить такое же поведение с помощью полифила: count(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $limit=0)).
println, которая выведет строку в stdout и завершит ее символом новой строки. Не str_contains(), конечно, но тоже занятно.file_get_contents / file_put_contents и пассивного режима FTP. А ошибка была в facade/ignition [39].После небольшого перерыва возвращаемся со стримом и ведущим Валентином Удальцовым!
Будет разбор новостей и ссылок из выпуска с подробностями и деталями, мнение Валентина по RFC и статьям. Интересное но не вошедшее в выпуск, результаты розыгрыша и новый конкурс со слониками.
Начало в 20:00 Москва, Минск / 19:00 Киев.
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра [76] или телеграм [77].
Больше новостей и комментариев в Telegram-канале PHP Digest [78].
Прислать ссылку [79]
Поиск ссылок по всем дайджестам [80]
← Предыдущий выпуск: PHP-Дайджест № 199 [81]
Автор: Роман Пронский
Источник [82]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/362478
Ссылки в тексте:
[1] Grégoire Gaonach: https://twitter.com/GregoireGaonach
[2] PHP 8.0.3: https://www.php.net/ChangeLog-8.php#8.0.3
[3] PHP 7.4.16: https://www.php.net/ChangeLog-7.php#7.4.16
[4] Предложен на рассмотрение новый стандарт PSR ClockInterface: https://github.com/php-fig/fig-standards/pull/1224/files?short_path=bc896a1#diff-bc896a1185817987d25269d5ba746546487d954744deaf3d8ff608f9babc17df
[5] Опубликованы обновления стандарта PSR-11 Container Interface: https://github.com/php-fig/container
[6] 1.1: https://github.com/php-fig/container/pull/27/files
[7] 2.0: https://github.com/php-fig/container/pull/28/files
[8] Уязвимость в Git clone: https://blog.packagist.com/git-clone-security-vulnerability/
[9] PhpStorm 2021.1 EAP: https://blog.jetbrains.com/phpstorm/2021/03/phpstorm-2021-1-eap-7/
[10] другие улучшения: https://www.youtube.com/watch?v=K_3VcHYK-vU
[11] Composer 1.x больше не поддерживается: https://blog.packagist.com/deprecating-composer-1-support/
[12] [RFC] New in initializers: https://wiki.php.net/rfc/new_in_initializers
[13] PHP Дайджест Live: #digest-live
[14] [RFC] Namespaces in bundled PHP extensions: https://wiki.php.net/rfc/namespaces_in_bundled_extensions
[15] [RFC] Static variables in inherited methods: https://wiki.php.net/rfc/static_variable_inheritance
[16] [RFC] Fibers: https://wiki.php.net/rfc/fibers#vote
[17] на канале: https://t.me/phpdigest/204
[18] по его мнению: https://twitter.com/krakjoe/status/1363768564168163329
[19] krakjoe/parallel: https://github.com/krakjoe/parallel
[20] [RFC] noreturn type: https://wiki.php.net/rfc/noreturn_type
[21] #[NoReturn]: https://habr.com/ru/company/JetBrains/blog/531828/#noreturn
[22] в .phpstormmeta.php: https://github.com/JetBrains/phpstorm-stubs/blob/6dee0fdac60e3ae3f31b6a0d59d5ff0470060216/meta/.phpstorm.meta.php#L688
[23] [RFC] debug_backtrace_depth(int $limit=0): int: https://wiki.php.net/rfc/debug_backtrace_depth
[24] [RFC] println(string $data = ''): int: https://wiki.php.net/rfc/println
[25] spiral/RoadRunner v2.0.0 : https://github.com/spiral/roadrunner/releases/tag/v2.0.0
[26] QratorLabs/Smocky: https://github.com/QratorLabs/Smocky
[27] runkit7: https://github.com/runkit7/runkit7
[28] Сравнительный обзор библиотек для работы с markdown: https://php.watch/articles/php-markdown-libraries
[29] phpize.online: https://phpize.online/
[30] 3v4l.org: https://3v4l.org/
[31] symfony/runtime: https://github.com/symfony/runtime
[32] В Symfony 6 минимальная версия PHP будет 8.0: https://github.com/symfony/symfony/issues/40389
[33] ansien/RapidFormBundle: https://github.com/ansien/RapidFormBundle
[34] Прагматичная архитектура на Symfony: https://medium.com/fusonic/a-pragmatic-architecture-part-1-57c29fbb8e7e
[35] Деплой Symfony приложения в Docker: https://medium.com/faun/deploy-symfony-app-in-docker-9be0c371c5c9
[36] CI/CD пайплайн для Symfony на GitLab: https://medium.com/faun/build-ci-cd-pipeline-on-symfony-app-using-gitlab-41b416aa3d7e
[37] Неделя Symfony #741 (8-14 марта 2021): https://symfony.com/blog/a-week-of-symfony-741-8-14-march-2021
[38] Разбор критической RCE уязвимости в Laravel <= v8.4.2 с debug mode: https://www.ambionics.io/blog/laravel-debug-rce
[39] facade/ignition: https://github.com/facade/ignition/pull/334
[40] Закончилась поддержка Laravel 7: https://laravelversions.com/
[41] spatie/laravel-remote: https://github.com/spatie/laravel-remote
[42] spatie/ssh: https://github.com/spatie/ssh
[43] Стрим с Freek Van der Herten: https://www.youtube.com/watch?v=3HPTh-EMY2U
[44] squirephp/squire: https://github.com/squirephp/squire
[45] Пошаговое руководство по созданию первого приложения для Laravel: https://laravel-news.com/your-first-laravel-application
[46] Laravel–Дайджест (22 февраля – 7 марта 2021): https://habr.com/ru/post/545884/
[47] Новости Yii 2021, выпуск 1: https://habr.com/ru/post/545616/
[48] yiisoft/network-utilities: https://github.com/yiisoft/network-utilities
[49] yiisoft/csrf: https://github.com/yiisoft/csrf
[50] Полное руководство по FFI в PHP: https://thephp.website/en/issue/php-ffi/
[51] Экранирование символов и числовые нотации в PHP: https://php.watch/articles/php-character-escape-sequences-numeric-notations
[52] Советы по тестированию на примерах в PHP: https://github.com/sarven/unit-testing-tips
[53] Как понять где должен быть сервис — на уровне приложения или домена?: https://matthiasnoback.nl/2021/02/does-it-belong-in-the-application-or-domain-layer/
[54] Бенчмарки PHP на процессорах arm64 vs x86_64: https://fraudmarc.com/arm64-vs-x86_64-for-php/
[55] Переход от nginx+fpm к Swoole увеличил производительность нашего PHP API на 91%: https://eldadfux.medium.com/moving-from-nginx-fpm-to-swoole-has-increased-our-php-api-performance-by-91-40f62e51a064
[56] github.com/appwrite: https://github.com/appwrite/appwrite
[57] Настраиваем отладку в PHP с Xdebug 3, Docker Compose и PhpStorm: https://matthewsetter.com/setup-step-debugging-php-xdebug3-docker/
[58] Как устроен CI в Laminas: https://mwop.net/blog/2021-03-12-laminas-ci.html
[59] Когда объектов недостаточно: https://www.tonysm.com/when-objects-are-not-enough/
[60] Run, config, run: как мы ускорили деплой конфигов в Badoo: https://habr.com/ru/company/badoo/blog/544102/
[61] Бэкдор во взломанном 1С-Битрикс: под угрозой сотни сайтов: https://habr.com/ru/post/544572/
[62] Как мы быстро распилили монолит, когда командам стало тесно: https://habr.com/ru/company/skyeng/blog/545058/
[63] Большой стрим PHP-сообщества: https://www.youtube.com/watch?v=6JF2U39J4RY
[64] О сложности домена и о провайдерах в PHP: https://www.youtube.com/watch?v=-80FAOQ4Z3k
[65] Оркестрируй это! Описываем сложные бизнес процессы на PHP: https://www.youtube.com/watch?v=0NCMEaFMj_M
[66] PHP Release Radar #6: Bref 1.0: https://www.youtube.com/watch?v=d4Z7Y_7QUlU
[67] PHP Internals News #77 : https://phpinternals.news/77
[68] PHP Internals News #78: https://phpinternals.news/78
[69] Andreas Heigl: https://twitter.com/heiglandreas
[70] отличный доклад на PHP Russia: https://www.youtube.com/watch?v=khW3w5C9yZg&list=PLsdzlHt60Mu1mZa6u6bkH1PX8N3eG_Ifr
[71] Пятиминутка PHP №87: PHP в 2021 году: https://5minphp.ru/episode87/
[72] Пятиминутка PHP №86: План обновления на PHP 8: https://5minphp.ru/episode86/
[73] Подкаст Между скобок 12: Антон Губарев – Работа архитектора: https://soundcloud.com/between-braces/12-anton-gubarev-rabota-arkhitektora
[74] PHP 8 и развитие языка в 30 вопросах и ответах: https://habr.com/ru/company/skyeng/blog/543794/
[75] 80+ докладов и статей, которые запомнились PHP-сообществу в 2020 году: https://habr.com/ru/company/skyeng/blog/544180/
[76] личку хабра: https://habrahabr.ru/conversations/pronskiy/
[77] телеграм: https://t.me/pronskiy
[78] PHP Digest: https://t.me/phpdigest
[79] Прислать ссылку: https://bit.ly/php-digest-add-link
[80] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[81] Предыдущий выпуск: PHP-Дайджест № 199: https://habr.com/ru/post/543628/
[82] Источник: https://habr.com/ru/post/547158/?utm_source=habrahabr&utm_medium=rss&utm_campaign=547158
Нажмите здесь для печати.