使用单例模式时。在类中保存静态实例和在返回实例的方法中保存有什么区别吗?
例子:在课堂上。
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 有什么好处/坏处吗?
更新:似乎唯一的区别是静态实例的范围?