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

PHP-Дайджест № 180 (4 – 18 мая 2020)

PHP-Дайджест № 180 (4 – 18 мая 2020) - 1

Свежая подборка со ссылками на новости и материалы. В выпуске: 2 принятых, 2 отклоненных и 6 новых RFC предложений из PHP Internals, обзор PHP 8, порция полезных инструментов, онлайн мероприятия, видео, подкасты и многое другое.

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

PHP-Дайджест № 180 (4 – 18 мая 2020) - 2 Новости и релизы

PHP-Дайджест № 180 (4 – 18 мая 2020) - 3 PHP Internals

  • Объявлены релиз-менеджеры PHP 8 — Ими стали Sara Golemon [8] (ex-HHVM/Hack, релиз-менеджер PHP 7.2) и Gabriel Caruso [9].
  • PHP-Дайджест № 180 (4 – 18 мая 2020) - 4 [RFC] Locale-independent float to string cast [10] — Принято предложение о приведении чисел с плавающей точкой к строке без учета локали. Вместо 3,14 будет 3.14, подробнее в канале [11].
  • PHP-Дайджест № 180 (4 – 18 мая 2020) - 5 [RFC] Add str_starts_with() and str_ends_with() functions [12] — Вдогонку к str_contains() [13] добавлены еще две функции: str_starts_with() и str_ends_with().
  • PHP-Дайджест № 180 (4 – 18 мая 2020) - 6 [RFC] Match expression [14] — Предложение отклонено. Одним из спорных моментов была возможность использовать блоки в выражении, однако автор считает [15], что без блоков пока в RFC смысла мало.
  • PHP-Дайджест № 180 (4 – 18 мая 2020) - 7 [RFC] Guard statement [16] — Предлагалось ввести ключевое слово guard для реализации, по сути, инвертированного if. Такая концепция есть в Swift [17], но из-за статической типизации там в ней больше смысла. Предложение отозвано автором.
  • [RFC] Conditional Return, Break, and Continue Statements [18] — Предлагается добавить возможность вызовов вида return if ($condition); для раннего выхода из функций
    function divide($dividend, $divisor = null) {
        return if ($divisor === null || $divisor === 0);
        // or
        return 0 if ($divisor === null || $divisor === 0);
    
        return $dividend / $divisor;
    }
    

    Похожий синтаксис широко используется в Ruby [19], но насколько это лучше if (condition) return; ?

  • [RFC] Named Arguments [20] — В PHP 8 предлагается добавить именованные аргументы, которые позволят передавать значения в функцию на основе имени параметра, а не его позиции.
    htmlspecialchars($string, double_encode: false);
    
    // вместо
    
    htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);
    

    Подробнее в канале [21].

  • [RFC] <<Deprecated>> Attribute [22] — Новым атрибутом предлагается маркировать устаревшие методы/функции, параметры, свойства, константы. При попытке доступа к ним будет вызвана trigger_error().
    Скрытый текст

    <?php
    
    <<Deprecated("use test2() instead")>>
    function test() {}
    
    class Foo {
        <<Deprecated>>
        public function test() {}
    
        public function test2(<<Deprecated>> $value) {}
    
        <<Deprecated>>
        public $value;
    
        <<Deprecated>>
        const FOO = 1;
    }
    
  • [RFC] Add CMS Support [23] — Предлагается включить WordPress в ядро PHP добавить несколько новых криптографических функций согласно RFC-5652 [24].
  • [RFC] Make sorting stable [25] — Стандартные функции сортировки в PHP не являются стабильными. Это значит, что оригинальный порядок элементов с одинаковыми значениями не гарантируется (пример [26]). Предлагается это исправить и сделать сортировки sort, rsort, usort, asort, arsort, uasort, ksort, krsort, uksort, array_multisort стабильными. Правда, при большом количестве одинаковых элементов такой фикс отразится на производительности (бенчмарк [27]).
  • [RFC] Opcache optimization without any caching [28] — Сейчас уже есть возможность использовать опкеш без выполнения оптимизаций (opcache.optimization_level=0) — это может быть полезно для CLI-скриптов, когда запуск оптимизаций дольше, чем выполнение неоптимизированного кода.

    А вот выполнить оптимизации без кеширования нельзя, что и предлагается реализовать. Такая возможность может быть полезна, когда запускается много долгоживущих скриптов и в условиях ограниченной памяти.

PHP-Дайджест № 180 (4 – 18 мая 2020) - 8 Инструменты

PHP-Дайджест № 180 (4 – 18 мая 2020) - 10 Symfony

PHP-Дайджест № 180 (4 – 18 мая 2020) - 12 Laravel

PHP-Дайджест № 180 (4 – 18 мая 2020) - 18 Async PHP

PHP-Дайджест № 180 (4 – 18 мая 2020) - 20 Материалы для обучения

PHP-Дайджест № 180 (4 – 18 мая 2020) - 23 Аудио/Видео

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

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

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

Прислать ссылку [80]
Поиск ссылок по всем дайджестам [81]
Предыдущий выпуск: PHP-Дайджест № 179 [82]

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

Источник [83]


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

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

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

[1] PHP 7.4.6: https://www.php.net/ChangeLog-7.php#7.4.6

[2] PHP 7.3.18: https://www.php.net/ChangeLog-7.php#7.3.18

[3] PHP 7.2.31: https://www.php.net/ChangeLog-7.php#7.2.31

[4] Fwdays PHP online meetup: https://fwdays.com/en/event/php-online-meetup

[5] PHP fwdays'20 online: https://fwdays.com/en/event/php-fwdays-2020

[6] программа: https://fwdays.com/en/event/php-fwdays-2020#program-event

[7] 3-й виртуальный PHP-митап: https://meetups-online.ru/php-may-2020

[8] Sara Golemon: https://github.com/sgolemon

[9] Gabriel Caruso: https://twitter.com/carusogabriel

[10] [RFC] Locale-independent float to string cast: https://wiki.php.net/rfc/locale_independent_float_to_string

[11] в канале: https://t.me/phpdigest/144

[12] [RFC] Add str_starts_with() and str_ends_with() functions: https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions

[13] str_contains(): https://wiki.php.net/rfc/str_contains

[14] [RFC] Match expression: https://wiki.php.net/rfc/match_expression

[15] автор считает: https://externals.io/message/110098#110098

[16] [RFC] Guard statement: https://wiki.php.net/rfc/guard_statement

[17] есть в Swift: https://www.hackingwithswift.com/new-syntax-swift-2-guard

[18] [RFC] Conditional Return, Break, and Continue Statements: https://wiki.php.net/rfc/conditional_break_continue_return

[19] используется в Ruby: https://github.com/rubocop-hq/ruby-style-guide#no-nested-conditionals

[20] [RFC] Named Arguments: https://wiki.php.net/rfc/named_params

[21] в канале: https://t.me/phpdigest/143

[22] [RFC] <<Deprecated>> Attribute: https://wiki.php.net/rfc/deprecated_attribute

[23] [RFC] Add CMS Support: https://wiki.php.net/rfc/add-cms-support

[24] RFC-5652: https://www.rfc-editor.org/rfc/rfc5652.html

[25] [RFC] Make sorting stable: https://wiki.php.net/rfc/stable_sorting

[26] (пример: https://3v4l.org/bpvq1

[27] (бенчмарк: https://gist.github.com/nikic/5d44cb5d0d7c1f414f455090a0193567

[28] [RFC] Opcache optimization without any caching: https://wiki.php.net/rfc/opcache.no_cache

[29] kornrunner/php-blurhash: https://github.com/kornrunner/php-blurhash

[30] Blurhash: https://blurha.sh/

[31] gotzmann/comet: https://github.com/gotzmann/comet

[32] PHP-фреймворк для быстрых REST API: https://habr.com/ru/post/501722/

[33] https://github.com/nikic/iter: https://github.com/nikic/iter

[34] @dmitrybalabka: https://twitter.com/dmitrybalabka

[35] morris/lessql: https://github.com/morris/lessql

[36] spiral/app-keeper: https://github.com/spiral/app-keeper

[37] theiconic/php-ga-measurement-protocol: https://github.com/theiconic/php-ga-measurement-protocol

[38] pascalbaljetmedia/laravel-analytics-event-tracking: https://github.com/pascalbaljetmedia/laravel-analytics-event-tracking

[39] vantoozz/proxy-scraper: https://github.com/vantoozz/proxy-scraper

[40] vantoozz: https://habr.com/ru/users/vantoozz/

[41] zenstruck/schedule-bundle: https://github.com/zenstruck/schedule-bundle

[42] fre5h/CentrifugoBundle: https://github.com/fre5h/CentrifugoBundle

[43] Часть 6. Тестирование: https://habr.com/ru/post/500044/

[44] Часть 7. Релизный цикл, установка и обновление: https://habr.com/ru/post/500596/

[45] Неделя Symfony #698 (11-17 мая 2020): https://symfony.com/blog/a-week-of-symfony-698-11-17-may-2020

[46] laravel-frontend-presets/tall: https://github.com/laravel-frontend-presets/tall/

[47] Перевод описания: https://laravel.demiart.ru/tall-stack/

[48] Laravel 7: https://habr.com/ru/post/502058/

[49] О паттерне «Бекенд-для-фронта» для создания монолитов: https://www.youtube.com/watch?v=zazeGmFmUxg

[50] majestic monolith: https://m.signalvnoise.com/the-majestic-monolith/

[51] Мультисайт (multi-tenancy) на Laravel без дополнительных пакетов: https://divinglaravel.com/multi-tenancy-in-laravel

[52] Как применить TDD для команд artisan: https://laracasts.com/series/guest-spotlight/episodes/12

[53] DriftPHP: Быстрый старт: https://sergeyzhuk.me/2020/05/08/driftphp-quick-start/

[54] paphper/paper: https://github.com/paphper/paper

[55] Интервью с Сергеем Жуком: https://habr.com/ru/post/501396/

[56] PHP 8 в восьми кусочках кода: https://stitcher.io/blog/php-8-in-8-code-blocks

[57] Новое в PHP 8: https://stitcher.io/blog/new-in-php-8

[58] Атрибуты в PHP 8: https://stitcher.io/blog/attributes-in-php-8

[59] В защиту фреймворков для моков: https://davedevelopment.co.uk/2020/05/14/in-defence-of-mocking-frameworks.html

[60] о тестировании без мокинговых фреймворков: https://blog.frankdejonge.nl/testing-without-mocking-frameworks/

[61] Ваше приложение является менеджером пакетов: https://tighten.co/blog/your-app-is-a-package-manager/

[62] Быстрое переключение между PCOV и Xdebug: https://localheinz.com/blog/2020/05/16/quickly-switching-between-pcov-and-xdebug/

[63] Better web sapi: https://github.com/Danack/RfcCodex/blob/master/better_web_sapi.md

[64] Matthias Noback: DDD и база данных: https://matthiasnoback.nl/2020/05/ddd-and-your-database/

[65] История одного проекта или как я 7 лет создавал АТС на базе Asterisk и PHP: https://habr.com/ru/post/501980/

[66] Проклятая старая CRM: https://habr.com/ru/company/skyeng/blog/501508/

[67] Пятиминутка PHP № 78: https://5minphp.ru/episode78/

[68] «Архитектура сложных веб-приложений. С примерами на Laravel»: https://github.com/adelf/acwa_book_ru

[69] Между скобок №7: https://soundcloud.com/between-braces/7-yuliya-nikolaeva-modulnyy-php-monolit

[70] оригинальный на английском: https://www.youtube.com/watch?v=cQZBS3u3SeU

[71] с переводом на русский: https://www.youtube.com/watch?v=zYWDlaOOFTU

[72] PHP Internals News podcast #52: https://phpinternals.news/52

[73] George Banyard: https://twitter.com/Girgias

[74] PHP Internals News #53: https://phpinternals.news/53

[75] ходу голосования: https://wiki.php.net/rfc/constructor_promotion#vote

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

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

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

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

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

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

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

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