Вызов функции непосредственно после конструктора: новый объект()->Функция вызова()


Как вы могли видеть в названии, мой опыт программирования - Java. В Java вы можете делать такие вещи

new Object().callSomeMethod();

Без присвоения созданного объекта переменной, очень полезное и понятное кодирование, если вам нужен этот объект только один раз.

Теперь в PHP я пытаюсь сделать то же самое

new Object()->callSomeMethod();

Но здесь я получаю "Ошибка синтаксического анализа: синтаксическая ошибка, неожиданная"->"(T_OBJECT_OPERATOR)".

Есть ли способ сделать это в PHP ?

Author: Basti Funck, 2013-09-18

1 answers

(new Object())->callSomeMethod();

Будет работать в PHP 5.4+

РЕДАКТИРОВАТЬ

Это новая функция, добавленная в PHP 5.4:

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

ПРАВКА2

Функция PHP RFC предлагает два набора синтаксиса (с и без скобок), оба они реализованы в RFC, но только один был отправлен. Я не смог найти ссылок, объясняющих это решение.

Давайте возьмем посмотрите на примеры синтаксиса без скобок в RFC:

  • new foo->bar() следует читать как (new foo)->bar()
  • new $foo()->bar следует читать как (new $foo())->bar
  • new $bar->y()->x следует читать как (new ($bar->y)())->x

Я думаю, что синтаксис без скобок не поставляется, потому что его предлагаемый приоритет синтаксического анализа не очень интуитивно понятен (трудно понять глазами), как показано в 3-м примере.

 16
Author: Kita, 2016-06-07 03:15:25