2011-04-19 96 views
2

在類對象中創建靜態成員併爲特定函數調用該成員是否是一個好主意?像:在類對象中創建靜態成員併爲特定函數調用該成員是一個好主意

class Users 
{ 
    public static Login(strUsername, strPassword) 
    { 
      $objThis = new Users(); 
      .... 
    } 
} 

並調用它喜歡:

Users::Login('admin', 'admin'); 

或第二種方法:

class Users 
{ 
    public Login(strUsername, strPassword) 
    { 
      //$objThis = new Users(); 
      .... 
    } 
} 

並調用它喜歡:應避免

$objThis = new Users(); 
$objThis->Login('admin','admin'); 
+1

如果使用靜態方法,則該類無法爲用戶維護任何狀態。 – alex 2011-04-19 10:15:48

+0

可能相關:http://stackoverflow.com/questions/752758/is-using-a-lot-of-static-methods-a-bad-thing和http://stackoverflow.com/questions/4685622/what-是-好理由使用的靜態的方法,在-PHP – 2011-04-19 10:18:09

回答

1

這些功能使用時

  • 你不希望允許,從 類之外創建類的實例 ,間接你想 構造私有或保護。
  • 或者您希望只允許整個請求的類的單個實例(一個請求)。對於。例如。數據庫,文檔等的類
0

一般靜態方法 - 他們使API和重構變得複雜。當初始化可能拋出一個異常(從文件等中讀取)和私有工具方法時,我只使用靜態方法作爲類構造函數的替代方法。

1

如果您想要限制對類的訪問並且不允許它被實例化,那麼第一種方法會很有用。例如:

class Users { 
    private function __construct($strUsername, $strPassword) { 
     // this class can now not be instantiated 
     // except within itself 
    } 

    public static Login($strUsername, $strPassword) 
    { 
      return new self($strUsername, $strPassword); 
    } 
} 

這迫使類的用戶始終使用靜態方法來獲取用戶對象,這可能是可取的,如果你總是希望限制其如何使用。

一如既往,它很大程度上取決於你想要做什麼。 static就像是一種工具,當它是手頭工作的正確工具時,就可以使用它。

相關問題