Появится ли в PHP 8.4 инстанцирование класса без лишних скобок
RFC для исключения круглых скобок вокруг выражения new
, вероятно, появится в PHP 8.4. В настоящее время RFC находится на стадии голосования, 24 голос за
и 3 голоса против
. Голосование заканчивается 24 мая, так что ещё есть шанс, что 2/3 голосов будут набраны, но оптимистично выглядит то, что всё движется в правильном направлении.
Поскольку доступ к членам класса при инстанцировании был представлен, необходимо обернуть вызов new MyClass()
круглыми скобками, иначе вы получите ошибку парсинга. Предлагаемый синтаксис позволит обращаться к константам, свойствам и методам без лишних круглых скобок:
class Request implements Psr\Http\Message\RequestInterface
{
// ...
}
// Valid
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
// PHP Parse error: syntax error, unexpected token "->"
$request = new Request()->withMethod('GET')->withUri('/hello-world');
Вот несколько общих примеров, которые, вероятно, будут использовать с этой функцией (в RFC есть и другие примеры):
var_dump(
new MyClass()::CONSTANT, // string(8) "constant"
new MyClass()::$staticProperty, // string(14) "staticProperty"
new MyClass()::staticMethod(), // string(12) "staticMethod"
new MyClass()->property, // string(8) "property"
new MyClass()->method(), // string(6) "method"
new MyClass()(), // string(8) "__invoke"
);
Все подробности об этом предлагаемом изменении можно прочитать в RFC. Скорее всего, эта функция появится в PHP 8.4. Реализация выглядит завершённой (ещё не одобрена и не объединена) и может быть найдена на GitHub.