使用單例模式時是否存在差異?在類中保存靜態實例並將其保存在返回實例的方法中時是否有任何區別?在類方法中使用靜態實例還是在類中使用
例子: 課內。
class cExampleA {
static $mInstance;
protected function __construct() {
/* Protected so only the class can instantiate. */
}
static public function GetInstance() {
return (is_object(self::$mInstance) ? self::$mInstance : self::$mInstance = new self());
}
}
返回方法裏面。
class cExampleB {
protected function __construct() {
/* Protected so only the class can instantiate. */
}
static public function GetInstance() {
static $smInstance;
return (is_object($smInstance) ? $smInstance : $smInstance = new self());
}
}
在一個側面說明,使用三元運算符的例子有效(這意味着它可能會導致問題),並沒有任何好處/倒臺使用is_object超過isset?
更新:似乎唯一的區別是靜態實例的範圍?
,在跳出我這裏的是,在照例a,靜態屬性是公開訪問的主要事情。我猜這不是你想要的,所以你應該把它設置爲'private'(尤其是因爲你只用'is_object()'來檢查它,這意味着它可以被任何東西覆蓋。會更安全)。 – SDC
是的,我剛剛錯過了私人。 instanceof聽起來像個好主意,我總是忘記它。 – James
我必須說實話,我不知道在這種情況下是有區別的。我想這是其中有不止一種方法來實現同樣的事情的情況之一。除非有人能以其他方式告訴我一個理由。對我來說,我會堅持使用私有財產(即exampleA),但我看不出爲什麼exampleB是錯誤的任何理由。 – SDC