2013-07-02 2 views
0

Я хотел бы сразу вызвать магический метод (__call()) на вновь построенном объекте. Пример:Непосредственный метод вызова из одной строки на новый объект PHP

class Foo { 
    public function __call($method,$args) { 
     echo "You were looking for the method $method.\n"; 
    } 
} 

Ideal (но получает ошибку синтаксического анализа):

$foo = new Foo()->bar(); // Fails :(

работы:

$foo = new Foo(); 
$foo = $foo->bar(); 

Возможно ли это? Я знаю, что PHP 5.4 вывел немедленный вызов метода 1-строчного объекта (http://docs.php.net/manual/en/migration54.new-features.php), поэтому я не уверен, почему это не работает.

+1

Вы хотите, чтобы значение '$ foo' представляло собой новый экземпляр класса' Foo' или результат возврата из метода 'bar'? –

+0

Результат из метода 'bar'. @ complex857 имеет рабочий ответ. –

ответ

4

Вы на самом деле только отсутствует () пару, это работает:

$foo = (new Foo())->bar(); // this works. 

В PHP 5.4 список изменений он пишет: доступ к члену

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

+0

Это не работает, вы протестировали? –

+0

Да, [у меня] (http://codepad.viper-7.com/GJEa2F). Вы уверены, что находитесь на php 5.4? – complex857

+0

«Ну есть твоя проблема» - Джейми Хайнман Неплохо, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^