2016-02-28 61 views
0

我正在尋找一種方法,您可以在類中調用一個靜態方法,該方法將創建它自己的一個實例。我喜歡它,所以它不可能在本身之外實例化類。我試過這個,但是我得到一個錯誤,說無法實例化抽象類(我認爲會發生)。只從本身內部實例化類

abstract class Test { 

    public function __construct($item){ 

    } 

    public static function from($item){ 
     return new Test($item); 
    } 

    public function testFunc(){ 
     // Do some stuff 
     return $this; 
    } 

} 

它的使用將是這個樣子:

// Valid 
Test::from($myItem)->testFunc(); 

// Invalid 
(new Test($myItem))->testFunc(); 

有沒有辦法做這樣的事情?

+0

看來你是試圖爲這個類實現一個單例,是嗎? –

+1

使構造函數爲'private',而不是類'abstract'。 – Marvin

+1

閱讀[單身班](http://www.phptherightway.com/pages/Design-Patterns.html)設計模式 –

回答

1

你需要做的構造私有,然後返回該實例..事情是這樣的:

class Test { 

    private function __construct($item){ 

    } 

    public static function from($item){ 
     return new static($item); 
    } 

} 

現在,您將創建新的情況下,僅是這樣的:

$new_object = Test::from('something'); 
+0

這看起來像它會做! –