PHP单例模式如何实现

发布时间:2022-12-28 14:55:22 作者:iii
来源:亿速云 阅读:108

这篇文章主要介绍“PHP单例模式如何实现”,在日常操作中,相信很多人在PHP单例模式如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP单例模式如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

简介

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

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

场景

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

优点

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

缺点

对象生命周期都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎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单例模式如何实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. ubuntu中phpmyadmin错误提示缺少mcrypt扩展怎么办
  2. 如何利用PHP脚本删除MySQL上所有的表

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:C#如何实现鼠标左右键切换效果

下一篇:Vue3中怎么使用watch监听对象的属性值

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》