- 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
Нажмите здесь для печати.