【php设计模式】单例模式
实现单例的三个关键点:
1、使用一个静态成员来保持一个单例实例
2、一个私有的构造方法使得该类只能在类的内部方法中被实例化
3、在实例化对象的静态方法中,先判断静态变量是否已经被赋值,如果赋值则返回该静态成员如果没有则重新实例化赋值
4、构造方法前面使用 final 关键字防止被子类覆盖构造函数
5、设置 __clone() 魔术方法防止克隆生成新的对象
单例模式:
<?php class Car{ public static $_instance = null; private $name; //添加final关键字防止子类覆盖父类的构造函数 final private function __construct($name){ $this->name = $name; } public static function getInstance($name){ if(!self::$_instance){ self::$_instance = new Car($name); } return self::$_instance; } public function getName(){ return $this->name; } //防止对象被克隆 final private function __clone() { } } $car = Car::getInstance("benchi"); $car1 = Car::getInstance("baoma"); if($car === $car1){ echo "完成相同".PHP_EOL; }else{ echo "我们不一样".PHP_EOL; }
普通实例化类:
class Car{ private $name; public function __construct($name){ $this->name = $name; } public function getName(){ return $this->name; } } $car = new Car("benchi"); $car1 = new Car("baoma"); print_r($car->getName()); print_r($car1->getName()); //输出 benchibaoma
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步