单例模式 只能new一个对象
1.第一次代码
为防止外界自由的new 自己new自己
2.第二次代码
//加个判断 有就不new可
//判断只有一个对象
class Single{
protected $rnd;
protected static $ins = null;
public function __construct(){
$this->rnd = mt_rand(0,100);
}
public static function getins(){
if(self::$ins === null){
self::$ins = new self();
}
return self::$ins;
}
}
$s1 = Single::getIns();
$s2 = Single::getIns();
这样也有问题 被人可以继承过来改为public 也可以克隆
防止克隆有克隆的方法
3.最终代码
private function __clone(){} //禁止克隆
最终代码
<?php
//单例模式
//判断只有一个对象
//最终代码
class Single{
protected $rnd;
protected static $ins = null;
public function __construct(){
$this->rnd = mt_rand(0,100);
}
public static function getins(){
if(self::$ins === null){
self::$ins = new self();
}
return self::$ins;
}
private function __clone(){} //禁止克隆
}
$s1 = Single::getIns();
$s2 = Single::getIns();
//$s3 = clone $s2 ; //clone的时候会报错 不能clone
print_r($s1);
print_r($s2);
var_dump($s2===$s1);
//var_dump($s3===$s2);