【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

 

posted @ 2019-05-21 21:22  GPHPER  阅读(338)  评论(0编辑  收藏  举报
TOP