单例模式 只能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);