Кто-нибудь знает, возможно ли следующее выражение в следующей версии PHP?
(new A())->a(); // Causes a syntax error
Мне очень досадно, что в настоящее время нужно написать 2 строки вместо 1:
$c = new A(); $c->a();
Первая версия не вызывает ошибки синтаксического анализа, это совершенно верно. Во-вторых, это действительно невозможно, но вы можете легко преодолеть такую проблему с некоторыми стандартами кодирования.
Если каждый член команды создает для каждого определенного класса функцию с тем же именем, что и класс, и подпись, похожая на подпись конструктора класса, то у вас не будет второй проблемы. Пример:
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 ().