2009-10-29 51 views
3
public function __construct($input = null) { 
    if (empty($input)){ 
     return false; 
    } 

,然後有一些構造函數代碼...PHP構造

什麼,我想要做的是,如果我傳遞一個空的變量

$ = ClassInstance的新MyClass的類別不初始化( ); 我想$ classinstance是空的(或false)

我認爲這是不可能的這樣,什麼是一種簡單的方法來實現類似的結果?

回答

5

你可以使私有的正常構造函數(所以它不能從對象外部使用,就像你製作一個Singleton一樣)並創建一個Factory Method

class MyClass { 
    private function __construct($input) { 
     // do normal stuff here 
    } 
    public static function factory($input = null) { 
     if (empty($input)){ 
      return null; 
     } else { 
      return new MyClass($input); 
     } 
    } 
} 

然後你會實例化一個類是這樣的:

$myClass = MyClass::factory($theInput); 

(編輯:現在假設你只是想支持PHP5)

+1

良好的補充說明。 – jheddings 2009-10-29 23:08:33

+0

贊成贊成:) – philfreo 2009-10-29 23:15:59

+0

我仍然需要__construct? – Daniel 2009-10-29 23:33:44

1

你可以使用一個工廠方法來創建對象:

private function __construct($input = null) { 
} 

public static function create($input = null) { 
    if (empty($input)) { 
     return false; 
    } 
    return new MyObject($input); 
}  
+0

我打敗了你3秒:) – philfreo 2009-10-29 23:06:06

+0

偉大的思想...... :) – jheddings 2009-10-29 23:08:02

+1

我相信你的創建方法應該是一個靜態方法,就像我的解決方案。 – philfreo 2009-10-29 23:08:27

0

我相信你是正確的。新對象的print_r將顯示它返回一個對象。

你可以讓它拋出一個異常,但這不可能是你想要的風格。

已發佈工廠方法+1。這些工廠方法也可能是這樣:

public static function newCreate($a) { return (!$a) ? false : new foo($a); } 

我喜歡工廠方法:-)