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

Свежая подборка со ссылками на новости и материалы. В выпуске: 3 принятых и 6 новых RFC-предложений из PHP Internals, включая голосование за новый синтаксис для атрибутов — @@ и почему #[] был бы лучше, переименования black/whitelist в PHP-мире, как отлаживают PHP-разработчики, аналог ngrok на PHP, видео, подкасты и многое другое.
Приятного чтения!
ошибка yield from [3].65% опрошенных указали [7], что для отладки пользуются подходом dump & die, поэтому провокационный твит автора Xdebug ожидаемо вызвал бурную реакцию в сообществе:
<<Attr1, Attr2>>, PhpAttribute переименован в Attribute, валидация и возможность добавлять несколько одинаковых атрибутов.class Foo
{
function __get(int $name): void
{
echo $name;
}
}
(new Foo)->{42};
В PHP 8 это вызовет ошибку на этапе компиляции.
class Test {
public function __construct() {
return 0;
}
public function __destruct() {
return 1;
}
}
$test = new Test();
// this prints 0
echo $test->__construct();
// this prints 1
echo $test->__destruct();
Предлагается в PHP 8.0 бросать Deprecated предупреждение в таких случаях. А уже в PHP 9.0 запретить полностью и генерировать Fatal Error.
namespace appfunction { class Foo {} }; свалится с ошибкой Parse error. Предлагается считать токеном весь неймспейс — это позволит минимизировать проблемы обратной совместимости при введении новых ключевых слов.:: в PHP называется T_PAAMAYIM_NEKUDOTAYIM — этот факт даже был обозначен как проблема № 1 [17] в списке грустей PHP [18]. ::, а с таким названием он и гуглится идеально.<<Attr>> (текущий) vs @@Attr vs #[Attr]. Brent Roоse привел [20] несколько убедительных аргументов в пользу #[ ]:
#[Attribute] просто проигнорируется интерпретатором PHP <=7.4 как комментарий.@@ можно спутать с оператором подавления ошибок (пример [21]).<<>> тоже не очень, потому что можно спутать с битовыми операторами и в будущем с дженериками, которые вероятно будут использовать одинарные угловые скобки <>.
opcache.blacklist_filename предлагается заменить на opcache.exclude_list_filename. null:
$country = $session?->user?->getAddress()?->country;
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
sprintf(), в Laravel — is_null(). Автор предоставил инструкцию [68], как подсчитать для других фреймворков.return if ($condition): $returnValue;.Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [86].
Вопросы и предложения пишите на почту [87] или в твиттер [88].
Больше новостей и комментариев в Telegram-канале PHP Digest [89].
Прислать ссылку [90]
Поиск ссылок по всем дайджестам [91]
← Предыдущий выпуск: PHP-Дайджест № 181 [92]
Автор: Роман Пронский
Источник [93]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/354258
Ссылки в тексте:
[1] PHP исполнилось 25 лет: https://www.jetbrains.com/ru-ru/lp/php-25/
[2] PHP 7.4.7: https://www.php.net/releases/7_4_7.php
[3] ошибка yield from: https://twitter.com/nikita_ppv/status/1264857231167807489
[4] PHP 7.3.19: https://www.php.net/releases/7_3_19.php
[5] Composer 2.0.0-alpha1: https://github.com/composer/composer/releases/tag/2.0.0-alpha1
[6] The State of Developer Ecosystem in 2020: https://www.jetbrains.com/lp/devecosystem-2020/php/
[7] указали: https://www.jetbrains.com/lp/devecosystem-2020/php/#:~:text=How%20do%20you%20usually%20debug%20PHP%20code%3F
[8] June 20, 2020: https://twitter.com/derickr/status/1274134192155131905?ref_src=twsrc%5Etfw
[9] [RFC] Attribute Amendments: https://wiki.php.net/rfc/attribute_amendments
[10] [RFC] Ensure correct signatures of magic methods: https://wiki.php.net/rfc/magic-methods-signature
[11] [RFC] Make sorting stable: https://wiki.php.net/rfc/stable_sorting
[12] примеры, когда это не так: https://3v4l.org/bpvq1
[13] [RFC] Opcache optimization without any caching: https://wiki.php.net/rfc/opcache.no_cache
[14] [RFC] Make constructors and destructors return void: https://wiki.php.net/rfc/make_ctor_ret_void
[15] [RFC] Treat namespaced names as single token: https://wiki.php.net/rfc/namespaced_names_as_token
[16] [RFC] Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON: https://wiki.php.net/rfc/rename-double-colon-token
[17] № 1: http://phpsadness.com/sad/1
[18] списке грустей PHP: http://phpsadness.com/
[19] [RFC] Shorter Attribute Syntax: https://wiki.php.net/rfc/shorter_attribute_syntax
[20] привел: https://twitter.com/brendt_gd/status/1273860590730129408
[21] пример: https://3v4l.org/j9tU0
[22] [RFC] Change terminology to ExcludeList: https://wiki.php.net/rfc/change-terminology-to-excludelist
[23] горячие обсуждения: https://externals.io/message/110515
[24] PHPUnit: https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.3.md#930---2020-08-07
[25] Drupal: https://www.drupal.org/project/drupal/issues/2993575
[26] Xdebug: https://github.com/xdebug/xdebug/commit/63b43b51e43b794cf8cd740e54089b2b7320fbe1
[27] Yii: https://github.com/yiisoft/yii2/pull/18104
[28] Composer: https://github.com/composer/composer/pull/8957
[29] работа с не-master Git-ветками: https://blog.packagist.com/composer-and-default-git-branches/
[30] правила для PHP_CodeSniffer: https://github.com/PHPCSStandards/PHPCSExtra/issues/59
[31] [RFC] Nullsafe operator: https://wiki.php.net/rfc/nullsafe_operator
[32] Обновлено расписание PHP 8.0: https://wiki.php.net/todo/php80
[33] 3v4l.org: https://3v4l.org/
[34] результат запуска в ветке php-master: https://3v4l.org/MgCFs/rfc#output
[35] beyondcode/expose: https://github.com/beyondcode/expose
[36] в канале PHP Digest: https://t.me/phpdigest/156
[37] canvural/php-openapi-faker: https://github.com/canvural/php-openapi-faker
[38] doctrine/migrations 3.0.0: https://github.com/doctrine/migrations/releases/tag/3.0.0
[39] mathiasverraes/uptodocs: https://github.com/mathiasverraes/uptodocs
[40] сертификация по Symfony 5: https://symfony.com/blog/the-symfony-5-certification-is-now-available
[41] будут использоваться PHP-файлы: https://github.com/symfony/symfony/issues/37186
[42] dbu/snake-bundle: https://github.com/dbu/snake-bundle
[43] Какой прирост производительности: https://www.ibexa.co/blog/how-much-of-a-performance-boost-can-you-expect-for-a-symfony-5-app-with-php-opcache-preloading
[44] 10 советов по тестированию Symfony: https://blog.cemunalan.com.tr/2020/02/02/10-symfony-testing-tips/
[45] Защита Symfony-приложений от Top 10 OWASP уязвимостей: https://nicwortel.nl/blog/2020/06/07/protect-symfony-application-against-owasp-top-10-security-risks
[46] Неделя Symfony #703 (15-21 июня 2020): https://symfony.com/blog/a-week-of-symfony-703-15-21-june-2020
[47] spatie/laravel-cronless-schedule: https://github.com/spatie/laravel-cronless-schedule
[48] Интро: https://freek.dev/1689-a-package-to-run-the-laravel-scheduler-without-relying-on-cron
[49] Добавляем try/catch в коллекции Laravel: https://freek.dev/1691-adding-trycatch-to-laravel-collections
[50] Laravel-Дайджест (15–21 июня 2020): https://habr.com/ru/post/507610/
[51] Статистика пакетов экосистемы Laravel: https://itnext.io/laravel-package-ecosystem-4afd53fad192
[52] June 16, 2020: https://twitter.com/samuelstancl/status/1272822437181378561?ref_src=twsrc%5Etfw
[53] Интеграция Yii 2 и Doctrine ORM: https://medium.com/rigor-guild/yii2-doctrine-orm-simple-integration-fb0625002a40
[54] Мертв ли Zend Framework?: https://www.youtube.com/watch?v=5luPg2oVUIk
[55] другие вопросы: https://www.youtube.com/watch?v=Gux2i9_A22c&list=PLCYlUTOY-57U3BlvsxEWzdmh_f7HHSAZu
[56] Matthew Weier O'Phinney: https://twitter.com/mwop
[57] asgrim/mini-mezzio: https://github.com/asgrim/mini-mezzio
[58] Mezzio: https://github.com/mezzio/mezzio
[59] badfarm/zanzara: https://github.com/badfarm/zanzara
[60] simple-swoole/simps: https://github.com/simple-swoole/simps
[61] бенчмаркам: https://github.com/the-benchmarker/web-frameworks#results
[62] Видеокурс по ReactPHP от Marcel Pociot: https://beyondco.de/video-courses#:~:text=Learning%20ReactPHP
[63] Представляем новый серверлесс LAMP стек: https://aws.amazon.com/blogs/compute/introducing-the-new-serverless-lamp-stack/
[64] подборка ресурсов: https://github.com/aws-samples/php-examples-for-aws-lambda/blob/master/serverless-php-resources.md
[65] AWS Toolkit: https://plugins.jetbrains.com/plugin/11349-aws-toolkit
[66] Об объявлении свойств в конструкторе в PHP 8: https://stitcher.io/blog/constructor-promotion-in-php-8
[67] Какие функции PHP наиболее часто используются во фреймворках?: https://thephp.website/en/issue/most-used-php-functions/
[68] инструкцию: https://github.com/nawarian/The-PHP-Website/tree/master/code/15-framework-functions/
[69] О финальных классах в PHP: https://medium.com/swlh/final-classes-in-php-9174e3e2747e
[70] Миллион за месяц: https://habr.com/ru/post/506346/
[71] Redis на практических примерах: https://habr.com/ru/company/manychat/blog/507136/
[72] Беги, PHPUnit, беги: https://habr.com/ru/post/505736/
[73] Самый быстрый шаблонизатор для PHP: https://habr.com/ru/post/504720/
[74] Видеозаписи всех докладов с PHP Russia 2020 Online: https://habr.com/ru/company/badoo/blog/487264/
[75] Макс Рафалко, Принципы проектирования пакетов PHP: https://www.youtube.com/watch?v=K_H1EweYmFU
[76] сетевая игра (часть 5): https://www.youtube.com/watch?v=SoOcZDRCmFI
[77] Между скобок № 9: https://soundcloud.com/between-braces/9-aleksandr-lisachenko-aop-v-php
[78] PHP Internals News #58: https://phpinternals.news/58
[79] Max Semenik: https://github.com/MaxSem
[80] RFC non-capturing catches: https://wiki.php.net/rfc/non-capturing_catches
[81] PHP Internals News #57: https://phpinternals.news/57
[82] Ralph Schindler: https://twitter.com/ralphschindler
[83] PHP Internals News #56: https://phpinternals.news/56
[84] Dan Ackroyd: https://twitter.com/MrDanack
[85] псевдотипе mixed: https://t.me/phpdigest/147
[86] личку: https://habrahabr.ru/conversations/pronskiy/
[87] почту: mailto:roman@pronskiy.com
[88] твиттер: https://twitter.com/pronskiy
[89] PHP Digest: https://t.me/phpdigest
[90] Прислать ссылку: https://bit.ly/php-digest-add-link
[91] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[92] Предыдущий выпуск: PHP-Дайджест № 181: https://habr.com/ru/post/504734/
[93] Источник: https://habr.com/ru/post/507636/?utm_source=habrahabr&utm_medium=rss&utm_campaign=507636
Нажмите здесь для печати.