PHP-Дайджест № 177 (23 марта – 6 апреля 2020)

ld1n5zudisrnylf1qk7n_9xka0c.jpeg

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

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


c9ee7880391644e4aef6cc28ca681ab0.png PHP Internals


  • Опубликовано Расписание релиза PHP 8 — Первая альфа ожидается 18 июня, а финальный релиз 3 декабря. Подробнее.
  • [RFC] Constructor Property Promotion — Ларри Гарфилд опубликовал подробный анализ эргономики объектов в PHP, в котором делает вывод, что лучше всего было бы сфокусировать на 3х RFC: Constructor Promotion, Named parameters, Compound Property Visibility (раздельное указание модификаторов доступа для чтения и записи {public get, private set}).
    И вот по следам анализа, в данном RFC предлагается разрешить объявлять свойства прямо в конструкторе:
    Вместо такого
    class Point {
        public float $x;
        public float $y;
        public float $z;
    
        public function __construct(
            float $x = 0.0,
            float $y = 0.0,
            float $z = 0.0
        ) {
            $this->x = $x;
            $this->y = $y;
            $this->z = $z;
        }
    }
    
    Можно будет писать:
    class Point {
        public function __construct(
            public float $x = 0.0,
            public float $y = 0.0,
            public float $z = 0.0
        ) {}
    }
    
  • [RFC] Allow trailing comma in parameter list — Ну и в дополнение к предыдущему, предлагается разрешить использовать запятую после последнего параметра в определении функции. Для списка аргументов при вызове функции это уже работает начиная с PHP 7.3.
    Скрытый текст
    class Uri {
        private function __construct(
            ?string $scheme,
            ?string $user,
            ?string $pass,
            ?string $host,
            ?int $port,
            string $path,
            ?string $query,
            ?string $fragment // <-- ARGH!
        ) {
            ...
        }
    }
    
  • [RFC] Stricter type checks for arithmetic/bitwise operators — Этот RFC предлагает выдавать ошибку TypeError, когда арифметический или побитовый оператор применяется к массиву, ресурсу или объекту.
    var_dump([] % [42]);
    // int(0)
    // WTF?
    
  • [RFC] Switch expression — Предлагается разрешить использовать switch в качестве выражения, а не только как управляющую конструкцию:
    $expressionResult = switch ($condition) {
        1 => foo(),
        2 => bar(),
        3, 4, 5 => baz(),
    };
    
    Также RFC предлагает разрешить перечисление возможных значений в секциях case: case 3, 4, 5: break; вместо case 3: case 4: case 5: break;.
  • [RFC] Type casting in array destructuring expressions — Предлагается сделать возможным использование приведения типов при деструктурировании массивов:
    [(int) $now, (int) $future] = ["2020", "2021"];
    
    // По сути то же, что и
    [$now, $future] = ["2020", "2021"];
    $now = (int) $now;
    $future = (int) $future;
    

    Николас Грекас в Твиттере приводит примеры возможного использования такой функциональности, а именно имитации именованных параметров:
    ...[int $i] = ['a' => '123'];
    
    function foo(...[int $i]) {
    }
    
    foo(['a' => '234']);
    
    и быстрого объявления типизированных вложенных структур:
    $var = (Foo) [
        'a' => 123,
        'b' => (Bar) [
            'c' => // ...
        ],
    ];
    
  • Отклонены по результатам голосования: Server-Side Request and Response Objects, Userspace operator overloading, Write-Once (readonly) Properties.


cf862d9072784d04b621238ec137f2ca.png Инструменты


  • TitasGailius/terminal — Красивая обёртка над symfony/process для запуска внешних команд из PHP.
  • rlanvin/php-ip — Библиотека для работы с IPv4/IPv6 на PHP, вдохновлённая ipaddress из Python.
  • ramsey/collection — Реализация коллекций вдохновлённая Java.
  • clue/graph-composer — Инструмент визуализирует связи между composer-пакетами вашего проекта.


96b65e92179a40f2bd1884549973ddd5.png Symfony


314bd0f0dfc54e3fa7f0c0daef1a2d25.png Laravel


569de4298b764a33894aa517e74324f9.png Yii


329bec7c1e914963a1c5d2f2bfe99995.png Материалы для обучения


8dcc236774104f8286a40ceaea553820.png Аудио/Видео

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

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

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

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

© Habrahabr.ru