浅谈单例模式
参考百度经验
单例模式顾名思义,就是对于指定的类只有一个实例,这样可以节省系统资源,也省去过多的实例化导致对象版本太多,不易管理。
1。首先需要保证该类不可以通过new来实例化。因为如果可以这样,那么就无法保证单例了。只需要把构造方法设置为private或者protected即可。
2。既然外部无法访问构造方法,那么也就无法实例化,就保证只能内部实例化,返回对象,那么就需要一个静态方法来,实例化该类本身并且返回该对象。
3.那么多次访问静态方法,不是也会创建不同的对象吗?这时候我们就需要一个静态属性来记录,如果该类已经被实例化过,就直接返回对象即可。
4.然后需要用final关键字防止该静态方法被继承,用__clone魔术方法防止该对象被克隆即可。
<?php
class single{
static public $object = null;
protected function __construct(){
}
final static function NewOb(){
if (self::$object instanceof self) {
return self::$object;
}
self::$object = new self();
return self::$object;
}
public function __clone(){
echo "想克隆没门<br />";
}
}
$t1 = single::NewOb();
$t2 = single::NewOb();
$t3 = clone $t2;
if ($t1 === $t2) {
echo '是一个对象<br />';
}else {
echo '不是一个对象<br />';
}
if ($t3 === $t2) {
echo '是一个对象<br />';
}else {
echo '不是一个对象<br />';
}
?>