ДайджестХабрахабр

PHP-Дайджест № 185 (20 июля – 3 августа 2020)

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Alpha 3, PhpStorm 2020.2, новый оператор ?->, снова обсуждение синтаксиса атрибутов и другие новости PHP Internals, обзор системы типов в PHP, порция полезных инструментов, видео, стримы и многое другое.

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

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

  • PHP 8.0.0 Alpha 3 — Последний альфа-релиз из запланированных. Первая бета ожидается 6 августа.
  • Релиз PhpStorm 2020.2 — Объединенные типы PHP 8, новый движок потока управления, пул-реквесты GitHub, OpenAPI. По ссылке подробный разбор этих и других изменений.

PHP Internals

  • [RFC] Shorter Attribute Syntax Change — История с синтаксисом атрибутов в PHP 8 продолжается. Предыстория была в канале.

    Вкратце: сначала был << >>, переголосовали за @@, а теперь новый виток обсуждений.
    У @@ были проблемы с парсером, но они решены благодаря нижеупомянутому RFC про неймспейсы. Тем не менее у него есть другие проблемы, и в качестве альтернативы предлагался вариант #[ ] как в Rust, но и у него есть минусы.

    Дошло до того, что рассматривается вариант переголосования за новый синтаксис и перенос атрибутов в PHP 8.1, потому что фиче-фриз для 8.0 уже 4 августа. То есть либо в PHP 8.0, но с одним из << >>, #[], @@, либо в PHP 8.1 с чем угодно.

    Для последнего случая предлагаются самые разные новые варианты: @[Attribute], в комментарии PHPDoc с двойной собачкой /** @@MyAttribute */, или даже маловероятный — переделать оператор подавления ошибок из @ в @@, а одинарную @ использовать в атрибутах.

    Еще забавно, что в ответ на письмо Дерика об ужасности @@, кто-то написал, что T_PAAMAYIM_NEKUDOTAYIM тоже ужасен, но не тут-то было — в PHP 8 Alpha 3 он уже не отображается для пользователя.

  • check[RFC] Treat namespaced names as single token — В PHP 8 весь неймспейс считается одним токеном. Это позволяет использовать внутри неймспейса ключевые слова, например, namespace app\function { class Foo {} } и избавляет от потенциальных проблем обратной совместимости при введении новых ключевых слов.

    Надеюсь, вам такое не приходилось встречать, но с этим изменением неймспейсы не могут содержать комментарии:

    use /** Try comments */ \FullyQualified \ /* in this ugly way */ SometTotallyDifferentTrait /** also after */;
  • check[RFC] Saner string to number comparisons — Почти единогласно прошло предложения ломающее обратную совместимость.

    В PHP 8, при сравнении чисел и строк с помощью нестрогого == оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.

    0 == 'foobar' теперь официально false.

    Это также влечет за собой изменение поведения всех операторов сравнения <=>, ==, !=, >, >=, < и <=, конструкции switch, функций типа in_array(), sort() и других.

  • check[RFC] Nullsafe operator — В PHP 8 будет новый оператор nullsafe: ?->.
    C ним вместо пачки вложенных условий можно обращаться к свойству или методу с проверкой на null.

    Например, такой приватный метод с кучей условий:

    Скрытый текст

    private function getUserCountry(): ?string{ $session = $this->sessionStorage->getSession(); if (null === $session) { return null; } $user = $session->getUser(); if (null === $user) { return null; } if (null === $user->address) { return null; } return $user->address->country;}

    можно будет заменить одной строкой:

    $country = $this->sessionStorage->getSession()?->getUser()?->address?->country;

    Прислал Валентин Удальцов (@Пых).

  • check[RFC] Allow trailing comma in closure use lists — В конце списка use у замыканий в PHP 8 можно будет оставлять запятую по аналогии с тем, как это уже работает для аргументов и параметров функций.
    Скрытый текст

    $f = function ( $longArgument, $longerArgument, $muchLongerArgument,) use ( $longVar1, $longerVar2, $muchLongerVar3, // Вот тут теперь тоже можно запятую) { ...};
  • check[RFC] Named Arguments — В PHP 8 будут именованные аргументы!
    Теперь можно будет передавать значения в функцию или метод на основе имени параметра, а не только его позиции.
    htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);

    станет:

    htmlspecialchars($string, double_encode: false);

    Подробнее об именованных аргументах в посте stitcher.io/blog/php-8-named-arguments.

  • [RFC] Renamed Parameters — Проблема переименования параметров методов была основным камнем преткновения в обсуждении именованных аргументов. Именно ее пытается решить автор этого RFC.

    Предлагается добавить возможность указывать внутреннее и внешнее имя параметра через двоеточие:

    function callBar(Foo $internalName:externalName) { $internalName->bar();} $x = new Foo();callBar(externalName: $x);

    Что-то подобное есть в Swift. В качестве альтернативы, возможно решение в виде атрибута @@NameAlias.

  • cross[RFC] Make constructors and destructors return void — Отклонен.

Инструменты

Symfony

Laravel

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

Аудио/Видео

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

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»