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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Фото James Titcumb

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

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

Новости и релизы


  • PHP 8.0 alpha 1 — Вышла первая альфа-версия новой ветки PHP! Впереди полугодовой цикл тестирования с финальным выпуском в конце ноября.
    Основные новые возможности:
    • объединенные типы;
    • JIT;
    • атрибуты;
    • объявление свойств в конструкторе;
    • новый тип mixed.

    Полные обзоры что нового в PHP 8 тут и тут. Пощупать можно на 3v4l.org или используя уже готовые Docker-образы.
  • `CurlHandle` class objects replace curl handlers — Еще, одной из долгосрочных целей PHP является отход от использования типа resource и вместо этого переход на классы/объекты. В PHP 8 привычные функции curl_ уже переделаны и вместо ресурса оперируют объектом класса \CurlHandle.
  • О производительности JIT в PHP 8 — После твита о феноменальном приросте производительности с JIT многие в сообществе засомневались в результатах бенчмарка и провели свои.

    Derick Rethans показал, что JIT дает хороший прирост на коде, который поддается оптимизации, но все равно это не сравнимо с чистой реализацией на C. Brent Roose попробовал на веб-приложениях и ожидаемо прирост в них минимальный.

    Benjamin Eberlei подготовил инструкцию о том, как вообще тестировать с JIT и на что обращать внимание.
  • Открытое собеседование — ищем участников — Вместе с Валентином Удальцовым скоро проведем собеседование в формате стрима. Прием заявок на участие заканчивается 8 июля.

PHP Internals


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

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

    Двусмысленность вот такая: function(@@X \ Y $z) может быть интерпретирован как function(@@X\Y $z) (атрибут X\Y и без типа) или 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 expected\n";
          break;
    }
    echo $result;
    //> Oh no!
    
    // То же самое на match:
    echo match ('foo') {
        0 => "Oh no!\n",
        'foo' => "This is what I expected\n",
    };
    //> 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 и все прочие операции работали, как и для строк с начальными пробелами.

Инструменты


  • 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.

Symfony


  • EasyAdmin 3 — Обновление генератора админок для Symfony-приложений.
  • ferrius/ddd-cqrs-example — Пример реализации принципов CQRS, DDD, ADR и гексагональной архитектуры на Symfony 5 и PHP 7.4.
  • Неделя Symfony #705 (29 июня — 5 июля 2020)
  • habr 10 советов по тестированию в Symfony.
  • habr [Symfony 5] Раздельная авторизация для админов и пользователей с двумя разными сущностями и формами входа.
  • habr Простое управление ACL в Symfony.

Laravel


  • Laravel Worldwide Meetup — Первый выпуск онлайн-митапа Laravel пройдет 14 июля в 21:00 UTC+3.
  • dollar Laravel Idea 3.1 — В новой версии плагина дла PhpStorm добавлена поддержка Livewire и nWidart/laravel-modules.
  • scil/LaravelFly — Пакет позволяет запускать Laravel на Swoole. Автор заверяет, что можно запускать один и тот же код и на PHP-FPM и на Swoole. Есть сравнение с другими подобными реализациями.
  • habr Решение проблемы N+1 запроса без увеличения потребления памяти в Laravel.
  • habr Laravel-Дайджест (29 июня – 5 июля 2020)
  • Отличный совет от Тейлора применим не только к Laravel:

Async PHP


  • amphp/websocket-server 2.0 — Вебсокет сервер на базе Amp.
  • clue/reactphp-buzz — Простой в использовании асинхронный HTTP-клиент.

Материалы для обучения


  • Путешествие в поисках утечки памяти — Как и где можно искать утечки, когда memory_get_usage() ничего не показывает.
  • Как использовать PHP FFI в программировании.
  • 0xbigshaq/php7-internals — Репозиторий с подборкой уязвимостей в PHP, объяснением почему так происходит и как они эксплуатируются.
  • Как будет выглядеть программирование в 2025?
  • Что делает max_execution_time?
  • Настраиваем Xdebug и PhpStorm для Symfony.
  • habr Дебажим PHP-контейнер с помощью Xdebug и PhpStorm.
  • habr Как быть, когда все советуют растащить проект на микросервисы, а ты не готов.
  • habr Если вы используете моки, то вы хоть что-то тестируете?

Аудио/Видео


  • video Настройка отладки с Xdebug, PhpStorm и Laravel в Docker — От автора Xdebug Derick Rethans.
  • videoru Видео Пятиминутка PHP: Про PhpStorm на macOS Metal.
  • videoru Видео Пятиминутка PHP: 25 лет PHP — история развития в наглядной инфографике.
  • videoru Несколько видео с PHP fwdays 2020
  • videoru Как готовить код-ревью: обсуждаем плохие и хорошие практики с Константином Буркалевым, Антоном Моревым, Сергеем Жуком и Александром Макаровым.
  • videoru MoreView #11 — Интервью со мной про дайджесты, PHP, JetBrains.
  • videoru Интервью Александром Макаровым про OpenSource, Yii 3 и всякое.
  • video Serverless Chats Podcast #55 — C Mathew Napoli автором Bref о серверлесс PHP.
  • audio PHP Internals News #60 — C Eliot Lear о поддержке новых криптографических функций согласно RFC-5652 в PHP 8.
  • audio PHP Internals News #59 — C Никитой Поповым об именованных параметрах, которые он в скором времени планирует выставить на голосование для PHP 8.

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

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

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

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

Источник: https://habr.com/ru/post/509738/


Интересные статьи

Интересные статьи

Свежая подборка со ссылками на новости и материалы. В выпуске: расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, п...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Если в вашей компании хотя бы два сотрудника, отвечающих за работу со сделками в Битрикс24, рано или поздно возникает вопрос распределения лидов между ними.
От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт ...
Свежая подборка со ссылками на новости и материалы. В выпуске: Zend Framework переходит под крыло Linux Foundation, новости из PHP Internals, порция полезных инструментов, и многое другое. П...