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

в 7:31, , рубрики: laravel, php, PHP 8, php-дайджест, symfony, yii, дайджест, Разработка веб-сайтов

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

Фото James Titcumb

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

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

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

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

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

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

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

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

  • check [RFC] Match expression v2 — В 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 — Предлагается разрешить опциональную запятую в конце списка use у замыканий по аналогии с тем, как уже сделано для аргументов и параметров функций.
    Скрытый текст

    $longArgs_longVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument,  // Здесь запятая в PHP 8.0 уже разрешена
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3  // А вот здесь предлагается добавить
    ) {
       // body
    };
    
  • [RFC] Property write/set visibility — В этом документе предлагается сделать возможным указание двух модификаторов доступа для свойств: отдельно на чтение и запись. И есть два варианта синтаксиса:
    // 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;
        }
    }
    

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

  • [RFC] Language Constructs Syntax Changes — Поскольку declare и __halt_compiler — это не функции, а языковые конструкции, по типу как echo, то предлагается разрешить вызывать их без скобок.
    declare(strict_types=1);
    // =>
    declare strict_types = 1;
    
  • [RFC] Saner numeric strings — В этом 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 — Свежий релиз самого известного HTTP-клиента для PHP. Теперь клиент реализует стандарт PSR-18, минимальная версия PHP 7.2, добавлены тайпхинты.
  • deligoez/xDebug-Toggler — Приложение для macOS для быстрого включения/выключения Xdebug.
  • denisyukphp/tmpfile-manager — Менеджер временных файлов. Умеет закрывать ресурсы, автоматически или вручную очищать временные файлы, запускать свой сборщик мусора. Прислал @jebox.
  • php-aidc/label-printer — Библиотека для работы с принтерами этикеток с поддержкой языков Fingerprint, Direct Protocol, TSPL/TSPL2. Прислал jhaoda.

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 Аудио/Видео

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

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

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

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

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

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js