Сокращенный синтаксис нового экземпляра->метода в PHP?

Возможный дубликат:
PHP: Как связать метод с вновь созданным объектом?

Я могу создать экземпляр и вызвать его метод через:

$newObj = new ClassName();
$newObj -> someMethod();

Но есть ли способ сделать это в более короткой нотации, анонимном экземпляре? Я пробовал это:

(new ClassName())->someMethod();

Но, похоже, это не работает так, как ожидалось.

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


person DanRedux    schedule 13.03.2012    source источник
comment
Проверьте это: stackoverflow.com/questions/2188629/   -  person afuzzyllama    schedule 13.03.2012


Ответы (3)


Не то, что я знаю из.

Но! - Вы можете реализовать шаблон Singleton, а затем вызвать:

ClassName::getInstance()->someMethod();

Или короче ;)

ClassName::gI()->someMethod();

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

ClassName::someMethod();
person Phil Rykoff    schedule 13.03.2012
comment
Насколько я знаю, у вас может быть только один синглтон. Боюсь, это обычный объект, некоторые из них будут анонимными, а некоторые будут храниться в контейнерах или массивах или даже в других объектах. Если я не смогу заставить getInstance вернуть новый экземпляр объекта. Я попробую. - person DanRedux; 13.03.2012
comment
Это сработало отлично! У моего конструктора есть необязательные параметры, поэтому мне пришлось включить их в мой класс getInstance(), когда он создал новый экземпляр и вернул его, но это определенно сработало. Спасибо. Теперь мои цепи выглядят намного чище. Я соглашусь, как только это позволит мне. - person DanRedux; 13.03.2012

PHP 5.4 поддерживает это.

Если вы не можете обновить, вы можете обойти это следующим образом:

function yourclass($param) {
   return new yourclass($param);
}

yourclass()->method();

Не забывайте, что ваш конструктор должен return $this;

person dynamic    schedule 13.03.2012

Если метод статический и не зависит ни от каких переменных класса (возможно, вы поместили его в класс только для целей организации), вы можете просто вызвать его статически, как phil демонстрирует с помощью getInstance:

ClassName::someMethod()
person Endophage    schedule 13.03.2012