PHP-Дайджест № 174 (10 января – 24 февраля 2020)

от автора

Свежая подборка со ссылками на новости и материалы. В выпуске: 5 новых RFC из PHP Internals, а также предложение по развитию языка и пара прототипов новых фич в виде пул-реквестов, порция полезных инструментов, видео, подкасты и многое другое.

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

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

PHP Internals

  • Language evolution — Предложение Никиты о том, как продолжать двигать PHP вперед, не ломая легаси код. Подробнее в канале дайджеста, и обсуждение в пул-реквесте.
  • Приняты: [RFC] Variable Syntax Tweaks, [RFC] Static return type, [RFC] Allow ::class on objects
  • [RFC] Write-Once Properties — Предлагается добавить новый модификатор для свойств, который позволит инициализировать свойства, но запретить их изменение. Открытым остаётся вопрос названия модификатора, из вариантов: final, immutable, readonly, writeonce, locked, sealed.
    Скрытый текст

    class Foo {     <keyword> public int $a = 1;     <keyword> public string $b;     <keyword> public array $c = ["foo"];     <keyword> public object $d;      public function __construct()     {         $this->b = "foo";     } }  $foo = new Foo();  $foo->a = 42;		// EXCEPTION: property a has already been initialized $foo->b = "bar";	// EXCEPTION: property b has already been initialized $foo->a++;		    // EXCEPTION: incrementing/decrementing is forbidden unset($foo->c);		// EXCEPTION: unsetting is forbidden $foo->c[] = "bar";	// EXCEPTION: arrays can't be modified $var= &$this->c;	// EXCEPTION: reference isn't allowed  $foo->d = new Foo();	// SUCCESS: property d hasn't been initialized before $foo->d->foo = "foo";	// SUCCESS: objects are still mutable internally 

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

  • [RFC] str_contains — Предлагается добавить функцию str_contains(string $haystack , string $needle) :bool, которая проверяет, содержится ли строка в другой строке вместо использования strpos() или strstr().
  • [RFC] Object-based token_get_all() alternative — Предлагается добавить альтернативу для текущей функции token_get_all(), которая вместо микса строк и массивов возвращал бы массив объектов PhpToken.
  • [RFC] get_debug_type — Ещё одна вспомогательная функция: комбинация gettype() и get_class().
  • [RFC] Allow explicit call-site pass-by-reference annotation — Обновлённый RFC от Никиты снова на обсуждении. Предлагается сделать возможным явное указание передачи аргументов по ссылке. Тем самым предупреждая разработчика о том, что переданная переменная изменится. В этот раз также предлагается добавить директиву, чтоб сделать режим опциональным.
    Скрытый текст

    declare(require_explicit_send_by_ref=1);  function byRef(&$ref) {...} byRef(&$var); 
  • [Pre-RFC] Add support for «decorator» pattern — Никита выложил прототип реализации паттерна «декоратор» для PHP.
    Скрытый текст

    interface Foo {     public function method1(int $a): void;     public function method2(): int;     public function method3(string $b): string;     public function method4(): stdClass;     // ... }  class ComposedFoo implements Foo {     private decorated Foo $inner;     public function __construct(Foo $inner) { $this->inner = $inner; }     public function method4(): stdClass {         return $DO_SOMETHING_DIFFERENT_HERE;     } }  /* Свойство помечено как decorated, что означает, что автоматически будут добавлены методы переадресации для всех публичных методов Foo, если только они не будут явно переопределены в классе. Эти методы будут иметь полные сигнатуры, поэтому они всё равно удовлетворяют интерфейсу. */ 
  • [PR] Use serialize_precision for printing floats in var_dump() — Данное изменение повлияет на то, как будут отображаться float числа при выводе через var_dump() (0.1 + 0.2 === 0.30000000000000004):
    Скрытый текст

     // Было $sum = 0.1 + 0.2; var_dump($sum); // float(0.3) var_dump($sum == 0.3); // bool(false) WTF???  // Станет $sum = 0.1 + 0.2; var_dump($sum); // float(0.30000000000000004) var_dump($sum == 0.3); // bool(false) Makes sense... 

Инструменты

Symfony

Laravel

Yii

Async PHP

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

Аудио/Видео

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

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

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

Прислать ссылку — Попробуем через GitHub.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест № 173

ссылка на оригинал статьи https://habr.com/ru/post/489662/


Комментарии

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

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