实现步骤:
1、封锁new操作,protected __construct();私有化构造函数;这样外部无法进行实例化,或者private
2、类内部留一个接口来进行实例化对象,静态方法;
public static function getIns(){ return new self();}
3、预先判断实例,有就进行返回,没有实例就进行实例化;保证一个实例化
if(!self::$ins === null) self::$ins = new self();
return self::$ins;
保证同一个对象。
4、防止被继承,使用final class single{};
构造方法前加final:则方法不能背覆盖
final protected function __construct();
类前加final,则类不能被继承。
5、防止被clone:$s1 = single::getIns();$s2 = clone $s1;
禁止克隆:
final protected function __clone(){};
示例代码
class single{
private static $ins = null;
private final function __construct() {}
private function __clone(){};
public static function getIns(){
if(self::$ins === null) self::$ins = new single();
return self::$ins;
}
}