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

PHP-Дайджест № 188 (7 – 21 сентября 2020)

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 1

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Beta 4, инициатива по консолидации PHP-сообщества, концепт PHP для GraalVM, предложение по дженерикам в Internals, полезные инструменты, видео, подкасты, статьи.

Приятного чтения!

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 2 Новости и релизы

  • PHP 8.0.0 Beta 4 [1] — Дополнительный незапланированный выпуск беты. Добавлен для стабилизации JIT и именованных аргументов в ядре, а также переделывания ворнингов и нотисов [2].
    Переносить дату финального релиза (26 ноября) пока не планируется. Следующий релиз-кандидат ожидается 1 октября.
  • PHP: Community Synergy Initiative [3] — С проектом PHP есть ряд проблем. Несколько заметных примеров: непонятная и устаревшая секция комментариев в документации на php.net [4], отсутствие синергии между сообществом и мейнтейнерами языка, недостаточно прозрачности в том, что происходит в проекте кроме новых фич через RFC и нехватка новых людей в проекте.

    Paul Dragoonis [5] и Christoph Rumpel [6] хотят сдвинуть дело с мертвой точки и для начала создали анонимный опрос The PHP Community Survey 2020 [7].

  • Концепт реализации PHP для GraalVM [8] — В рамках проекта GraalVM развивается альтернативная виртуальная машина для Java с поддержкой других языков. В экспериментальной реализации PHP пока сделано [9] лишь небольшое подмножество возможностей PHP.

    На синтетическом бенчмарке Computer Language Benchmarks Game [10] показывает более чем 80-кратное увеличение производительности по сравнению с PHP 7.4 [11].

  • Поддержка MySQL 5.6 заканчивается в феврале 2021 [12] — Если вы думали, что с обновлением PHP плохо обстоят дела, то вот статистика [13] использования MySQL в WordPress: 65% установок используют MySQL ≤5.6.
  • Composer 2.0 RC1 [14]

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 3 PHP Internals

  • Удаляемые дженерики (eliding generics) [15] — Brent Roose, известный своими постами о Laravel и PHP [16], выдвинул на обсуждение идею добавить в PHP дженерики, но без проверок в рантайме.

    Например, возьмем такой код:

    class Collection<T> {
    
        public function add(T $item) { ... }
    
    }
    $c = new Collection<Product>().
    

    Статические анализаторы и IDE смогут его распарсить и провести анализ. В то время как интерпретатор дженерики проигнорирует и будет выполнять код как:

    class Collection {
    
        public function add(mixed $item) { ... }
    
    }
    $c = new Collection().
    

    Идея не новая. Точно так же по умолчанию работают дженерики и в Hack [17]. А в Python, например, почти вся информация о типах в большинстве случаев удаляется и ни один популярный интерпретатор не валидирует типы аргументов.

  • Observer API [18] — В PHP 8 будет добавлен внутренний API для отслеживания входа и выхода из функции. Это полезно для расширений типа Xdebug, профайлеров и APM-решений New Relic, Tideways, и т. п.

    Подробнее об API в подкасте PHP Internals News #68 [19] с авторами Levi Morrison [20] и Sammy K Powers [21].

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 4 Инструменты

  • phpbench/phpbench 1.0.0-alpha1 [22] — Очень удобный инструмент для бенчмаркания своего кода. В новой версии можно сравнивать результаты с предыдущими запусками и соответственно использовать на CI для контроля производительности. Подробнее в посте [23].
  • seanmorris/php-wasm [24] — Активно развивающийся форк PIB: PHP in Browser — PHP, скомпилированный в WebAssembly с помощью Emscripten. Позволяет запускать PHP в современных браузерах. Демо: Drupal в браузере [25].
  • imliam/php-unique-gmail-address [26] — Пакет для нормализации Gmail адресов (убирает точки, добавления через + и прочее).
  • jawira/emoji-catalog [27] — 3k+ смайликов emoji в константах.

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 5 Symfony

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 6 Laravel

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 11 Yii

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 13 Async PHP

phpstorm PhpStorm

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 16 Материалы для обучения

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 21 Аудио/Видео

PHP-Дайджест № 188 (7 – 21 сентября 2020) - 24 Занимательное


Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [61].
Вопросы и предложения пишите на почту [62] или в твиттер [63].

Больше новостей и комментариев в Telegram-канале PHP Digest [64].

Прислать ссылку [65]
Поиск ссылок по всем дайджестам [66]
Предыдущий выпуск: PHP-Дайджест № 187 [67]

Автор: Роман Пронский

Источник [68]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/357174

Ссылки в тексте:

[1] PHP 8.0.0 Beta 4: https://www.php.net/archive/2020.php#2020-09-17-1

[2] переделывания ворнингов и нотисов: https://wiki.php.net/rfc/engine_warnings

[3] PHP: Community Synergy Initiative: https://www.reddit.com/r/PHP/comments/ivpfcf/php_community_synergy_initiative/

[4] php.net: https://www.php.net/

[5] Paul Dragoonis: https://twitter.com/dr4goonis

[6] Christoph Rumpel : https://twitter.com/christophrumpel

[7] The PHP Community Survey 2020: https://docs.google.com/forms/d/e/1FAIpQLSc5tGeRixL62mT90TwRGTtQXq-MeN6jUcBnCwKqmBo_lzXOyQ/viewform

[8] Концепт реализации PHP для GraalVM: https://github.com/abertschi/graalphp

[9] пока сделано: https://github.com/oracle/graal/issues/361#issuecomment-692670732

[10] Computer Language Benchmarks Game: https://en.wikipedia.org/wiki/The_Computer_Language_Benchmarks_Game

[11] по сравнению с PHP 7.4: https://github.com/abertschi/graalphp/blob/master/results.md

[12] Поддержка MySQL 5.6 заканчивается в феврале 2021: https://elephantdolphin.blogspot.com/2020/09/mysql-56-end-of-life-is-less-than-six.html

[13] статистика: https://wordpress.org/about/stats/#mysql_versions

[14] Composer 2.0 RC1: https://github.com/composer/composer/releases/tag/2.0.0-RC1

[15] Удаляемые дженерики (eliding generics): https://externals.io/message/111875

[16] постами о Laravel и PHP: https://stitcher.io/

[17] в Hack: https://docs.hhvm.com/hack/generics/type-erasure

[18] Observer API: https://github.com/php/php-src/pull/5857

[19] PHP Internals News #68: https://phpinternals.news/68

[20] Levi Morrison: https://twitter.com/morrisonlevi

[21] Sammy K Powers: https://twitter.com/SammyK

[22] phpbench/phpbench 1.0.0-alpha1: https://github.com/phpbench/phpbench

[23] в посте: https://www.dantleech.com/blog/2020/09/09/phpbench-alpha1/

[24] seanmorris/php-wasm: https://github.com/seanmorris/php-wasm

[25] Drupal в браузере: https://seanmorris.github.io/php-wasm/?autorun=1&code=%253C%253Fphp%250Aini_set%28%27session.save_path%27%252C%2520%27%252Fhome%252Fweb_user%27%29%253B%250Asession_id%28%27fake-cookie%27%29%253B%250Asession_start%28%29%253B%250A%250A%2524stdErr%2520%253D%2520fopen%28%27php%253A%252F%252Fstderr%27%252C%2520%27w%27%29%253B%250A%2524errors%2520%253D%2520%255B%255D%253B%250A%250Aregister_shutdown_function%28function%28%29%2520use%28%2524stdErr%252C%2520%2526%2524errors%29%257B%250A%2520%2520%2520%2520fwrite%28%2524stdErr%252C%2520json_encode%28%255B%27session_id%27%2520%253D%253E%2520session_id%28%29%255D%29%2520.%2520%2522%255Cn%2522%29%253B%250A%2520%2520%2520%2520fwrite%28%2524stdErr%252C%2520json_encode%28%255B%27headers%27%253D%253Eheaders_list%28%29%255D%29%2520.%2520%2522%255Cn%2522%29%253B%250A%2520%2520%2520%2520fwrite%28%2524stdErr%252C%2520json_encode%28%255B%27errors%27%2520%253D%253E%2520error_get_last%28%29%255D%29%2520.%2520%2522%255Cn%2522%29%253B%250A%257D%29%253B%250A%250Aset_error_handler%28function%28...%2524args%29%2520use%28%2524stdErr%252C%2520%2526%2524errors%29%257B%250A%2509fwrite%28%2524stdErr%252C%2520print_r%28%2524args%252C1%29%29%253B%250A%257D%29%253B%250A%250A%2524origin%2520%2520%253D%2520%27http%253A%252F%252Flocalhost%253A3333%27%253B%250A%2524docroot%2520%253D%2520%27%252Fpreload%252Fdrupal-7.59%27%253B%250A%2524path%2520%2520%2520%2520%253D%2520%27%252F%27%253B%250A%2524script%2520%2520%253D%2520%27index.php%27%253B%250A%250A%2524_SERVER%255B%27REQUEST_URI%27%255D%2520%2520%2520%2520%2520%253D%2520%2524docroot%253B%250A%2524_SERVER%255B%27REMOTE_ADDR%27%255D%2520%2520%2520%2520%2520%253D%2520%27127.0.0.1%27%253B%250A%2524_SERVER%255B%27SERVER_NAME%27%255D%2520%2520%2520%2520%2520%253D%2520%2524origin%253B%250A%2524_SERVER%255B%27SERVER_PORT%27%255D%2520%2520%2520%2520%2520%253D%25203333%253B%250A%2524_SERVER%255B%27REQUEST_METHOD%27%255D%2520%2520%253D%2520%27GET%27%253B%250A%2524_SERVER%255B%27SCRIPT_FILENAME%27%255D%2520%253D%2520%2524docroot%2520.%2520%27%252F%27%2520.%2520%2524script%253B%250A%2524_SERVER%255B%27SCRIPT_NAME%27%255D%2520%2520%2520%2520%2520%253D%2520%2524docroot%2520.%2520%27%252F%27%2520.%2520%2524script%253B%250A%2524_SERVER%255B%27PHP_SELF%27%255D%2520%2520%2520%2520%2520%2520%2520%2520%253D%2520%2524docroot%2520.%2520%27%252F%27%2520.%2520%2524script%253B%250A%250Achdir%28%2524docroot%29%253B%250A%250Adefine%28%27DRUPAL_ROOT%27%252C%2520getcwd%28%29%29%253B%250A%250Arequire_once%2520DRUPAL_ROOT%2520.%2520%27%252Fincludes%252Fbootstrap.inc%27%253B%250Adrupal_bootstrap%28DRUPAL_BOOTSTRAP_FULL%29%253B%250A%250A%2524uid%2520%2520%2520%2520%2520%253D%25201%253B%250A%2524user%2520%2520%2520%2520%253D%2520user_load%28%2524uid%29%253B%250A%2524account%2520%253D%2520array%28%27uid%27%2520%253D%253E%2520%2524user-%253Euid%29%253B%250Auser_login_submit%28array%28%29%252C%2520%2524account%29%253B%250A%250Amenu_execute_active_handler%28%29%253B&persist=0&render-as=html&single-expression=0

[26] imliam/php-unique-gmail-address: https://github.com/imliam/php-unique-gmail-address

[27] jawira/emoji-catalog: https://github.com/jawira/emoji-catalog

[28] Неделя Symfony #716 (14-20 сентября 2020): https://symfony.com/blog/a-week-of-symfony-716-14-20-september-2020

[29] Релиз Laravel 8: https://laravel-news.com/laravel8

[30] на Laracasts: https://laracasts.com/series/whats-new-in-laravel-8

[31] Обзор системы аутентификации в Laravel: https://laravel.com/docs/8.x/authentication#ecosystem-overview

[32] laravel/fortify: https://github.com/laravel/fortify

[33] laravel/jetstream: https://jetstream.laravel.com/1.x/introduction.html

[34] Как переключить драйвер очереди в Laravel на лету: https://divinglaravel.com/switching-between-queue-drivers-in-laravel-without-stopping-the-world

[35] Laravel Business: https://www.youtube.com/channel/UCTuplgOBi6tJIlesIboymGA/videos

[36] Распространенные ошибки безопасности в приложениях Laravel: https://habr.com/ru/post/518400/

[37] Laravel–Дайджест (14–20 сентября 2020): https://habr.com/ru/post/519916/

[38] Yii 2.0.38: https://www.yiiframework.com/news/303/yii-2-0-38

[39] Новости Yii 2020, выпуск 6: https://habr.com/ru/post/519742/

[40] Создаем PSR-15 адаптер для react/http: https://blog.wyrihaximus.net/2020/09/next-gen-react-http-psr-15-adapter/

[41] krakjoe/parallel: https://github.com/krakjoe/parallel

[42] Используем ReactPHP для работы с HTTP API: https://mglaman.dev/blog/using-reactphp-consume-data-http-api

[43] Как ускорить разработку с помощью лайв темплейтов (сниппеты кода) в PhpStorm: https://www.youtube.com/watch?v=ec3aOtWxOog

[44] Code With Me: https://surveys.jetbrains.com/s3/code-with-me

[45] Простой рецепт отвязывания логики приложения от фреймворка: https://matthiasnoback.nl/2020/09/simple-recipe-for-framework-decoupling/

[46] О влиянии исключений на производительность: https://php.watch/articles/php-exception-performance

[47] Пошаговая инструкция о том, как контрибьютить в опенсорсные пакеты PHP.: https://johnbraun.blog/posts/contributing-to-a-PHP-package

[48] 4 совета по рефакторингу в PHP: https://christoph-rumpel.com/2020/8/refactoring-php

[49] Часть 1 — типичные проблемы: https://labs.detectify.com/2020/08/13/modern-php-security-part-1-bug-classes/

[50] Часть 2 — рекомендации по защите: https://labs.detectify.com/2020/08/20/modern-php-security-part-2-breaching-and-hardening-the-php-engine/

[51] Диалекты в коде: часть 2: https://www.rosstuck.com/dialects-in-code-part-2

[52] HTTP-клиент на стероидах: https://habr.com/ru/post/518978/

[53] Среда разработки PHP на базе Docker: https://habr.com/ru/post/519500/

[54] Ускоряем кеш проекта в NoVerify (линтер для PHP) в 10 раз: https://habr.com/ru/post/519706/

[55] Улучшения покрытия PHP кода в 2020 году: https://habr.com/ru/company/oleg-bunin/blog/519080/

[56] Никита Попов и Nikolas Grekas обсуждают совместимость Symfony с PHP 8: https://www.youtube.com/watch?v=c3bpTBjhK2Y

[57] Использование Xdebug для отслеживания функций: https://vimeo.com/457966378

[58] как использовать профайлер Xdebug: https://vimeo.com/455589710

[59] Неофициальное лого PHP 8: https://www.elephpant.com/#:~:text=PHP8%20logo

[60] White ConFoo elePHPant: https://shop.confoo.ca/foo-du-roi

[61] личку: https://habrahabr.ru/conversations/pronskiy/

[62] почту: mailto:roman@pronskiy.com

[63] твиттер: https://twitter.com/pronskiy

[64] PHP Digest: https://t.me/phpdigest

[65] Прислать ссылку: https://bit.ly/php-digest-add-link

[66] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[67] Предыдущий выпуск: PHP-Дайджест № 187: https://habr.com/ru/post/518064/

[68] Источник: https://habr.com/ru/post/519960/?utm_source=habrahabr&utm_medium=rss&utm_campaign=519960