单例模式 PHP

单例模式

使用场景:

        当两个模块只需要使用一个对象来进行通信,并且该对象不能被覆盖(即只要该对象只能生成一个实例,且无论调用多少次都是这一个实例并且无法被覆盖),这是就需要使用到单例模式。

关键点:

        1.用来通信的对象不能被覆盖

        2.谁都可以使用这个对象来传递数据

实例:

要创建一个这样的类,有几点需要思考

       1.该类不能被直接在类外实例化,直接实例化会导致实例化出多个实例。由此可以想到必须将构造函数私有化才可以在类内实现实例化

       2.该类只能被实例化一次,这说明在调用该类第一次的时候就会实例化,第二次不会被实例化。这时就需要一个私有的成员变量来存储该类的实例,通过判断该成员变量是否为空来控制是否为第一次实例化。

       3.可以增加一些私有的成员变量用来存储其他模块通信时所需要传输的数据。

       4.私有的成员变量在类外部不能直接操作,因此需要创建get和set方法用来获取和存放信息;

<?php 

class SingleInstance{
    private $price;
    private static $instance;
    private function __construct(){
        
    }
    public static function getInstance(){
        if (empty(static::$instance)) {
            static::$instance=new SingleInstance();
        }
        return static::$instance;
    }
   public function getPrice(){
       return $this->price;
   }
   public function setPrice($price){
       $this->price=$price;
   }
}

$single=SingleInstance::getInstance();
$single->setPrice(20);
echo $single->getPrice(),PHP_EOL;//结果 20

unset ($single);//在此处将其销毁
$single2=SingleInstance::getInstance();
echo $single2->getprice();//再次实例化,发现结果仍是20


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值