2012-03-13 47 views
1

可能重複:
PHP: How to chain method on a newly created object?簡寫新實例 - > PHP中的方法語法?

我可以創建一個實例,並調用它通過的方法:

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

但有什麼辦法,我可以做一個短符號,一個匿名實例?我試過這個:

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

但它似乎沒有按預期工作。

附加信息:我想調用的方法是公共的,但不是靜態的。

+2

檢查了這一點:http://stackoverflow.com/問題/ 2188629/php-how-to-chain-method-on-a-new-created-object – afuzzyllama 2012-03-13 19:21:47

回答

2

不是我所知道的。

但是! - 你可以實現一個Singleton模式,然後調用:

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

或者,把它剪短;)

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

如果的someMethod並不是指$這一點,你也可以簡單地把它作爲一個靜態功能,雖然它沒有被定義爲一個:

ClassName::someMethod(); 
+0

據我所知,你只能有一個單身人士。恐怕這是一個常規對象,有些將是匿名的,但有些將存儲在容器或數組中,甚至是其他對象中。除非我可以讓getInstance返回一個新的對象實例..我會試試看。 – DanRedux 2012-03-13 19:21:15

+0

它工作完美!我的構造函數有可選的參數,所以當它創建一個新實例並返回它時,我不得不將它們包含在我的getInstance()類中,但它確實有效。謝謝。我的鏈條現在看起來很乾淨。我會盡快接受它。 – DanRedux 2012-03-13 19:25:32

3

PHP 5.4支持它。

如果您不能更新可以解決辦法是這樣的:

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

yourclass()->method(); 

不要忘記,你的構造函數必須return $this;

0

如果該方法是靜態的,不依賴於任何類變量(也許你已經把它放在一個類只是爲了組織的目的),你可以簡單地staticly稱其爲菲爾與展示的getInstance:

ClassName::someMethod()