我找到了一个简单的课程,如下:
abstract class SingleTon {
/**
* Prevents direct creation of object.
*
* @param void
* @return void
*/
final protected function __construct() {}
/**
* Prevents to clone the instance.
*
* @param void
* @return void
*/
final protected function __clone() {}
/**
* Gets a single instance of the class the static method is called in.
*
* See the {@link http://php.net/lsb Late Static Bindings} feature for more
* information.
*
* @param void
* @return object Returns a single instance of the class.
*/
final static public function getInstance(){
static $instance = null;
return $instance ?: $instance = new static;
}
}
问题是,使用abstract class SingleTon
代替class SingleTon
是否有意义?我的意思是......
正如您所见, _ 构造 受到保护, _clone 。到目前为止,我理解“抽象”对我来说对于使用抽象是无意义的,因为我已经无法实例化该类,不是吗?
答案 0 :(得分:0)
克隆一个单身人士没有多大意义 - 那么你就有了一个双重身份,而且它不再是一个单身人士了。同样,保护构造函数也是有道理的,因为这个类唯一能做的就是在第一次调用getInstance()时创建单例。
某人实例化对象并不需要单独的对象直到以后才是不合理的,所以将实际的初始化逻辑放入getInstance方法是有意义的 - 这会将单例对象的创建延迟为迟到了。