Цепочка конструктора с вызовом функции объекта в PHP

Кто-нибудь знает, возможно ли следующее выражение в следующей версии PHP?

(new A())->a(); // Causes a syntax error 

Мне очень досадно, что в настоящее время нужно написать 2 строки вместо 1:

 $c = new A(); $c->a(); 

Related of "Цепочка конструктора с вызовом функции объекта в PHP"

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

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

 class Foo { public function __construct($param) {} public function bar() {} } /** * @return Foo */ function Foo($param) { return new Foo($param); } Foo()->bar(); 

Конечно, у вас все еще будут проблемы с библиотечным кодом.

В качестве аргумента функции можно использовать новое выражение. Вызов функции может быть использован как левая сторона оператора доступа элемента. Поэтому вам просто нужно определить одну функцию:

 function with($object) { return $object; } with(new A()) -> a(); 

Никаких дополнительных усилий не требуется для каждого класса.

Это возможно с PHP 5.4+ :

Добавлен доступ члена класса к экземпляру, например (новый Foo) -> bar ().