php单例模式

php单例模式



//单例只允许一个类被实例化一次

//php单例的实现
//单例只允许一个类被实例化一次

class single{
    protected static $ins = null;

    //方法前加final,则方法在继承时不能被修改和覆盖
    //防止继承时修改访问权限
    final protected function __construct(){

    }


    public static function getIns(){
        // if(self::$ins === null){
            self::$ins = new self();
        // }
        return self::$ins;
    }

    //防止被clone
    final protected function __clone(){}

    //这种方式不可行,返回的对象依然是一个新对象
    /*
    public function __clone(){
        return self::$getIns();
    }
    */

}

$a = single::getIns();
$b = single::getIns();
if($a === $b){
    echo 'yes';
}else{
    echo 'no';
}

总结:

1、父类的构造方法定义为protected,无法在外部被直接通过new实例化;

2、使用关键字final后,子类继承后不能修改这个方法的访问属性,就可以禁止子类将构造方法公开。

3、防止clone,可以禁止通过可能产生新的对象。


原文地址:https://www.cnblogs.com/gyfluck/p/9674977.html