广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >一文带你搞懂PHP单例模式
  • 811
分享到

一文带你搞懂PHP单例模式

PHP单例模式PHP设计模式 2022-12-20 18:12:29 811人浏览 安东尼
摘要

目录简介场景优点缺点示例代码简介 单例模式是创建型对象的一种,用于如何优雅的创建对象。 让一个类最多产生一个对象。 场景 只需要一个对象就能解决并且要使用多次的场景,比如框架的数据库

简介

单例模式是创建型对象的一种,用于如何优雅的创建对象。

让一个类最多产生一个对象。

场景

只需要一个对象就能解决并且要使用多次的场景,比如框架数据库连接。

优点

减少资源消耗,一个对象能完成的事情,就不需要再实例化出来同样的东西。

缺点

对象生命周期都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式意义不大。

示例代码

class Demo {
    //声明一个存储对象的方法
    private static $obj;
    //防止当前类的外部进行实例化
    private function __construct() {}
    //防止当前类的外部进行克隆
    private function __clone() {}
    //声明一获取示例的方案
    public static function getInstance() {
        if(self::$obj === null) {
            self::$obj = new self();
        }
        return self::$obj;
    }
    public function otherFunction() {
        //todo ...
    }
}

测试代码:

class Demo {
    //声明一个存储对象的方法
    private static $obj;
    //防止当前类的外部进行实例化
    private function __construct() {}
    //防止当前类的外部进行克隆
    private function __clone() {}
    //声明一获取示例的方案
    public static function getInstance() {
        if(self::$obj === null) {
        //在此处打印数据到文件,可清楚的看出来执行了几次。
        //静态方法或者静态属性可以称之为类变量或者类属性,会随着类的加载一并加载到内存当中。
            file_put_contents('F:/stdout.txt', 1,FILE_APPEND);
            self::$obj = new self();
        }
        return self::$obj;
    }
    public function otherFunction() {
        //todo ...
    }
}
//类的外部执行了5次实例化操作
for($i = 0; $i < 5; $i++) {
    Demo::getInstance();
}

升级版本:

如果每一个类都写一个单例模式的话,会显得有重复的代码,为此可以用继承去解决这个问题。

此时self就需要修改为static,不然self是当前对象而不是子类对象。

static::方法或属性,这种使用称为后期静态绑定。

这和但是static 修饰成员属性或者成员方法,一个是使用,一个是修饰。

class Singleton {
    //声明一个存储对象的方法
    private static $obj;
    //防止当前类的外部进行实例化
    private function __construct() {}
    //防止当前类的外部进行克隆
    private function __clone() {}
    //声明一获取示例的方案
    public static function getInstance() {
    	//检测$obj是否为空并是否不属于当前类
        if(((static::$obj === null) && (! static::$obj instanceof static))) {
            static::$obj = new static();
        }
        return static::$obj;
    }
}
class Test extends Singleton {
    public function func() {
        return mt_rand(0, 10);
    }
}
//使用:
Test::getInstance()->func();

到此这篇关于一文带你搞懂php单例模式的文章就介绍到这了,更多相关PHP单例模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文带你搞懂PHP单例模式

本文链接: https://www.lsjlt.com/news/175366.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作