4.php单例模式

    单例模式是我们经常会使用的设计模式,常用来针对重复创建对象的情况下,由于在整个运行环境中仅仅存在一份,有时候我们也把他用来像常量一样来保存数据。这里说一句,我们在使用JSON对象来保存数据这就相当于变量来保存数据,我们使用单例来保存数据就会类似于结构化的常量。

    单例模式我们仅仅只需要创建一个类,我尽量在类中间做好注释。

<?php
class Sigon{
    //用来保存自己这个对象
    private static $obj = NULL;
    
   /* 
    * 设置构造方法为私有,不允许外部创建对象,实际上我们在其他方法中创建对象,
    * 就是对该方法的调用,我们在这个方法 内部可以做一些初始化的工作
    * */
    private function  __construct(){
        
    }
    
    //提供外部创建对象的接口,因为已经在外部没办法创建对象了,所以一定是静态的
    public static function create(){
        //判断自身对象是否已经存在,不存在才创建
        if(self::$obj === NULL){
            self::$obj = new self();
        }
        //将对象返回使用
       return self::$obj;
    }
    
}

$sigonobj = Sigon::create();
var_dump($sigonobj); 
    执行研究这个类,就知道这个类并不复杂。现在我们面临两个关键问题1.这个类可以通过继承创建其子类对象,我们就失去了仅仅创建一个对象的初衷。2.我们还知道使用clone也能创建出一模一样的对象。面对这两个问题。我们也当然有办法解决。

    //提供外部创建对象的接口,因为已经在外部没办法创建对象了,所以一定是静态的
    final public static function create(){
        //判断自身对象是否已经存在,不存在才创建
        if(self::$obj === NULL){
            self::$obj = new self();
        }
        //将对象返回使用
       return self::$obj;
    }
    
    private function __clone(){}
    这样几行代码就轻易解决了这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值