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

PHP-Дайджест № 183 (22 июня – 5 июля 2020)

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 1

Фото James Titcumb [1]

Свежая подборка со ссылками на новости и материалы. В выпуске все про PHP 8: первая альфа, новое выражение match, баг в синтаксисе @@ для атрибутов, реальные бенчмарки JIT, 4 новых предложения. И, как всегда, инструменты, статьи, видео и подкасты.

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

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 2 Новости и релизы

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 3 PHP Internals

  • check [RFC] Shorter Attribute Syntax [21] — На голосовании по новому синтаксису для атрибутов победил вариант @@.

    Позже выяснилось, что этот синтаксис может трактоваться неоднозначно, а в реализации использовался хак, чтобы обойти проблему и об этом не было упомянуто в предложении.

    Двусмысленность вот такая: function(@@X Y $z) может быть интерпретирован как function(@@XY $z) (атрибут XY и без типа) или function(@@X Y $z) (атрибут X и Y тип параметра). Потому что PHP допускает пробелы вокруг разделителя неймспесов.

    К счастью для поклонников синтаксиса @@, Никита нашел способ [22] решить проблему, если будет принято предложение [RFC] Treat namespaced names as single token [23].

  • check [RFC] Match expression v2 [24] — В PHP 8 будет доступно новое выражение match, которое работает по смыслу как switch, но при этом имеет проверку на тип и возможность возвращать значение.
    // Вот так работает switch:
    switch ('foo') {
        case 0:
          $result = "Oh no!n";
          break;
        case 'foo':
          $result = "This is what I expectedn";
          break;
    }
    echo $result;
    //> Oh no!
    
    // То же самое на match:
    echo match ('foo') {
        0 => "Oh no!n",
        'foo' => "This is what I expectedn",
    };
    //> This is what I expected
    
  • [RFC] Allow trailing comma in closure use lists [25] — Предлагается разрешить опциональную запятую в конце списка use у замыканий по аналогии с тем, как уже сделано для аргументов и параметров функций.
    Скрытый текст

    $longArgs_longVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument,  // Здесь запятая в PHP 8.0 уже разрешена
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3  // А вот здесь предлагается добавить
    ) {
       // body
    };
    
  • [RFC] Property write/set visibility [26] — В этом документе предлагается сделать возможным указание двух модификаторов доступа для свойств: отдельно на чтение и запись. И есть два варианта синтаксиса:
    // Syntax Option A
    class User {
        public:private int $id;
        public:protected string $name;
    
        public function __construct(int $id, string $name) {
            $this->id = $id;
            $this->name = $name;
        }
    }
    
    // Syntax Option B
    class User {
        public private(set) int $id;
        public protected(set) string $name;
    
        public function __construct(int $id, string $name) {
            $this->id = $id;
            $this->name = $name;
        }
    }
    

    Судя по треду [27], что-то подобное будет, но уже в PHP 8.1, потому что требуется больше времени для обсуждения нюансов и пересечений с другими RFC, например, полноценными аксессорами [28], ридонли свойствами [29], иммутабельными классами [30].

  • [RFC] Language Constructs Syntax Changes [31] — Поскольку declare и __halt_compiler — это не функции, а языковые конструкции, по типу как echo, то предлагается разрешить вызывать их без скобок.
    declare(strict_types=1);
    // =>
    declare strict_types = 1;
    
  • [RFC] Saner numeric strings [32] — В этом RFC предлагается сделать два изменения по части обработки строк с числами.

    Во-первых, избавиться от концепции «строки, начинающейся с цифр». Например в таком случае echo '2str' + 2; результат будет не 4, а 2 и вместо E_NOTICE “A non well formed numeric value encountered” будет брошен E_WARNING “A non-numeric value encountered”.

    И во-вторых, разрешить пробельные символы в конце числовых строк, то есть чтоб "123 " == " 123" было true и все прочие операции работали, как и для строк с начальными пробелами.

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 6 Инструменты

  • Guzzle 7 [33] — Свежий релиз самого известного HTTP-клиента для PHP. Теперь клиент реализует стандарт PSR-18 [34], минимальная версия PHP 7.2, добавлены тайпхинты.
  • deligoez/xDebug-Toggler [35] — Приложение для macOS для быстрого включения/выключения Xdebug.
  • denisyukphp/tmpfile-manager [36] — Менеджер временных файлов. Умеет закрывать ресурсы, автоматически или вручную очищать временные файлы, запускать свой сборщик мусора. Прислал @jebox [37].
  • php-aidc/label-printer [38] — Библиотека для работы с принтерами этикеток с поддержкой языков Fingerprint, Direct Protocol, TSPL/TSPL2. Прислал jhaoda [39].

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 7 Symfony

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 11 Laravel

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 15 Async PHP

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 16 Материалы для обучения

PHP-Дайджест № 183 (22 июня – 5 июля 2020) - 20 Аудио/Видео

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

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

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

Прислать ссылку [83]
Поиск ссылок по всем дайджестам [84]
Предыдущий выпуск: PHP-Дайджест № 182 [85]

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

Источник [86]


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

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

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

[1] James Titcumb: https://twitter.com/asgrim

[2] PHP 8.0 alpha 1: https://www.php.net/archive/2020.php#2020-06-25-1

[3] полугодовой цикл: https://wiki.php.net/todo/php80

[4] новые возможности: https://wiki.php.net/rfc#php_80

[5] объединенные типы: https://php.watch/versions/8.0#union-types

[6] JIT: https://habr.com/ru/company/otus/blog/509598/

[7] атрибуты: https://php.watch/articles/php-attributes

[8] объявление свойств в конструкторе: https://php.watch/versions/8.0/constructor-property-promotion

[9] mixed: https://php.watch/versions/8.0#mixed-type

[10] тут: https://php.watch/versions/8.0

[11] тут: https://stitcher.io/blog/new-in-php-8

[12] 3v4l.org: https://3v4l.org/

[13] Docker-образы: https://hub.docker.com/_/php?tab=tags&page=2

[14] `CurlHandle` class objects replace curl handlers: https://php.watch/versions/8.0/resource-CurlHandle

[15] твита: https://twitter.com/IvanChepurnyi/status/1276576154254786561

[16] показал: https://derickrethans.nl/a-quick-look-at-jit.html

[17] попробовал: https://stitcher.io/blog/jit-in-real-life-web-applications

[18] как вообще тестировать с JIT: https://beberlei.de/2020/07/05/what_to_look_out_for_when_testing_php_jit.html

[19] Открытое собеседование — ищем участников: https://t.me/phpdigest/160

[20] Валентином Удальцовым: https://twitter.com/vudaltsov

[21] [RFC] Shorter Attribute Syntax: https://wiki.php.net/rfc/shorter_attribute_syntax

[22] нашел способ: https://externals.io/message/110640#110819

[23] [RFC] Treat namespaced names as single token: https://wiki.php.net/rfc/namespaced_names_as_token

[24] [RFC] Match expression v2: https://wiki.php.net/rfc/match_expression_v2

[25] [RFC] Allow trailing comma in closure use lists: https://wiki.php.net/rfc/trailing_comma_in_closure_use_list

[26] [RFC] Property write/set visibility: https://wiki.php.net/rfc/property_write_visibility

[27] треду: https://externals.io/message/110768

[28] аксессорами: https://wiki.php.net/rfc/propertygetsetsyntax-v1.2

[29] ридонли свойствами: https://wiki.php.net/rfc/write_once_properties

[30] иммутабельными классами: https://wiki.php.net/rfc/immutability

[31] [RFC] Language Constructs Syntax Changes: https://wiki.php.net/rfc/language-constructs-syntax-changes

[32] [RFC] Saner numeric strings: https://wiki.php.net/rfc/saner-numeric-strings

[33] Guzzle 7: https://github.com/guzzle/guzzle

[34] PSR-18: https://www.php-fig.org/psr/psr-18/

[35] deligoez/xDebug-Toggler: https://github.com/deligoez/xDebug-Toggler

[36] denisyukphp/tmpfile-manager: https://github.com/denisyukphp/tmpfile-manager

[37] @jebox: https://twitter.com/jebox

[38] php-aidc/label-printer: https://github.com/php-aidc/label-printer

[39] jhaoda: https://habr.com/ru/users/jhaoda/

[40] EasyAdmin 3: https://github.com/EasyCorp/EasyAdminBundle

[41] ferrius/ddd-cqrs-example: https://github.com/ferrius/ddd-cqrs-example

[42] Неделя Symfony #705 (29 июня — 5 июля 2020): https://symfony.com/blog/a-week-of-symfony-705-29-june-5-july-2020

[43] 10 советов по тестированию в Symfony: https://habr.com/ru/company/mailru/blog/508376/

[44] [Symfony 5] Раздельная авторизация для админов и пользователей с двумя разными сущностями и формами входа: https://habr.com/ru/post/508936/

[45] Простое управление ACL в Symfony: https://habr.com/ru/company/otus/blog/508424/

[46] Laravel Worldwide Meetup: https://meetup.laravel.com/

[47] Laravel Idea 3.1: https://plugins.jetbrains.com/plugin/13441-laravel-idea

[48] Livewire: https://laravel-livewire.com/

[49] nWidart/laravel-modules: https://github.com/nWidart/laravel-modules

[50] scil/LaravelFly: https://github.com/scil/LaravelFly

[51] сравнение: https://github.com/scil/LaravelFly#similar-projects-that-mix-swoole-and-laravel

[52] Решение проблемы N+1 запроса без увеличения потребления памяти в Laravel: https://habr.com/ru/post/508544/

[53] Laravel-Дайджест (29 июня – 5 июля 2020): https://habr.com/ru/post/509662/

[54] June 24, 2020: https://twitter.com/taylorotwell/status/1275874807805067266?ref_src=twsrc%5Etfw

[55] amphp/websocket-server 2.0: https://github.com/amphp/websocket-server

[56] Amp: https://amphp.org/

[57] clue/reactphp-buzz: https://github.com/clue/reactphp-buzz/releases/tag/v2.9.0

[58] Путешествие в поисках утечки памяти: https://jolicode.com/blog/a-journey-to-find-a-memory-leak

[59] Как использовать PHP FFI в программировании: https://spiralscout.com/blog/how-to-use-php-ffi-in-programming

[60] 0xbigshaq/php7-internals: https://github.com/0xbigshaq/php7-internals

[61] Как будет выглядеть программирование в 2025?: https://tomasvotruba.com/blog/2020/06/29/how-will-programming-look-like-in-2025/

[62] Что делает max_execution_time?: https://aivis.dev/php-max-execution-time-explained

[63] Настраиваем Xdebug и PhpStorm для Symfony: https://www.strangebuzz.com/en/blog/step-by-step-debugging-with-xdebug-symfony-and-phpstorm

[64] Дебажим PHP-контейнер с помощью Xdebug и PhpStorm: https://habr.com/ru/company/otus/blog/507982/

[65] Как быть, когда все советуют растащить проект на микросервисы, а ты не готов: https://habr.com/ru/company/skyeng/blog/508286/

[66] Если вы используете моки, то вы хоть что-то тестируете?: https://habr.com/ru/company/mailru/blog/508254/

[67] Настройка отладки с Xdebug, PhpStorm и Laravel в Docker: https://vimeo.com/433218463

[68] Про PhpStorm на macOS Metal: https://www.youtube.com/watch?v=T0CShIFwyRw

[69] 25 лет PHP — история развития в наглядной инфографике: https://www.youtube.com/watch?v=FZ-3Qc89PEY

[70] Несколько видео с PHP fwdays 2020: https://www.youtube.com/user/fwdays/videos

[71] Как готовить код-ревью: https://www.youtube.com/watch?v=JP7lppzWaLg

[72] MoreView #11: https://www.youtube.com/watch?v=KvTQWv0phgE

[73] Интервью Александром Макаровым: https://www.youtube.com/watch?v=TI5Bl2tw4Ks

[74] Serverless Chats Podcast #55: https://www.youtube.com/watch?v=H8tkZcjQxOA

[75] Bref: https://github.com/brefphp/bref

[76] PHP Internals News #60 : https://phpinternals.news/60

[77] PHP Internals News #59: https://phpinternals.news/59

[78] именованных параметрах: https://wiki.php.net/rfc/named_params

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

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

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

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

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

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

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

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