PHP面向对象的单态(单例)设计模式_php单态对象-程序员宅基地

技术标签: 单态设计模式  PHP  单例设计模式  

PHP的面向对象中有单态设计模式和多态设计模式,我来简单的说一下单态设计模式

单态设计模式又称单例设计模式,作用是多人使用,最终结果只得到一个对象

我们假设一个多人写作开发的情景,开发人员都需要调用某个类进行实例化操作,例如是我们操作数据库的类,每个开发人员都需要去调用这个类来实例化操作,因此会产生很多实例化对象,例如mysql的最大连接数不能超过300,此时会导致数据库服务不能正常的运行

以下是单态设计模式的思路

1.不能让用户在外面实例化对象 ---------> 封装构造方法

2.调用的时候不能实例化对象 ---------> 提供一个方法用于调用

3.普通方法在外部不能直接调用 ---------> 改为静态方法

4.在方法中我们可以添加判断 -----------> 添加一个属性用于判断

5.在静态方法中不能出现普通属性 --------> 改为静态属性

class Mysql{
    static public $link = null;
    protected function __construct(){
        echo '连接数据库';
    }
    static public function getConnect(){
        if(is_null(self::$link)){
            //说明你是第一个进来的,可以让你实例化对象
            self::$link = new Mysql;
        }

        //如果不是第一个进来的,直接调用上一次的
        return self::$link;
        
    }
}

我们可以使用 === 来测试一下是否多个实例化,最终结果只得到一个对象

$mysql = Mysql::getConnect();
$mysql2 = Mysql::getConnect();

if($mysql === $mysql2){
    echo '是同一个对象';
}else{
    echo '不是同一个对象';
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25410347/article/details/89855137

智能推荐

linux实训6权限管理,Linux 学习笔记(6)权限管理-程序员宅基地

文章浏览阅读211次。Linux 学习笔记(6)权限管理RHEL里面执行ls命令时,可以看见第一个字母来判断类型。常见的类型有d (目录)- (普通文件)c (设备文件 字符型)b (设备文件,块文件)l ( 软连接,快捷方式)例如,目录和普通文件设备文件软连接设备文件,块文件(硬盘)首先看看如何更改文件的所有者 chown, -R表示递归的处理所有的子目录和子文件,-v表示输出详细的变化结果更改文件或者目录的组具体的..._linux综合实践6

getline()_getinline-程序员宅基地

文章浏览阅读4.8k次,点赞4次,收藏6次。int main(){ string line: while(getline(cin,line)) cout<<line<<endl; return 0;}getline()的原型:头文件:#include <string>istream& getline ( istream &i..._getinline

java如何实现etc,如何使用蚂蚁来检查java源代码(TODO:etc)-程序员宅基地

文章浏览阅读202次。it's common to see something like this in code, hopefully only during development://XXX: not in production!String password = "hello"; // getActualPassword(...);...catch(Exception e) { /* TODO: Auto-ge..._蚂蚁怎么修改网站源代码

PMP考前冲刺题2022(正题)含解析_一个组织在历史上一直使用预测性方法-程序员宅基地

文章浏览阅读7.7k次,点赞6次,收藏16次。PMP习题_一个组织在历史上一直使用预测性方法

Vue-lazyload原理详解之源码解析_vue-lazyload的原理-程序员宅基地

文章浏览阅读2w次,点赞19次,收藏43次。前叙本来想要研究mint-ui组件库的Lazy load组件,没想到翻看它的源码,发现它完全引用的vue-lazyload项目,直接引用,没有丝毫修改。 因此转而研究vue-lazyload,代码并不多,几百行吧,有兴趣的可以读一下。简单接入示例html代码:

Getting Started With Spring Cloud Stream_please use 'spring.cloud.function.definition' prop-程序员宅基地

文章浏览阅读268次。October 25, 2019 Brian McClainThis post was co-written with Ben Wilcock, Product and Technical Marketing Manager for Spring at Pivotal.???? A file has been uploaded! ???????? A new user was registered! ???????? ..._please use 'spring.cloud.function.definition' property to explicitly define

随便推点

Excel、WPS表格条件格式根据字符设置行单元格式_字符型格式 wps表格-程序员宅基地

文章浏览阅读159次。根据单元格是含有的字符来设置整行格式如下:_字符型格式 wps表格

Flex与java 整合入门配置-程序员宅基地

文章浏览阅读111次。1.关于Flex+java整合有三种方式配置,其原理大致相同 首先需要blazeds从官网上可以下载http://www.adobe.com 第一种: myeclipse 工具中新建web项目. Flex_Service 作为后台服务项目 右击WebRoot --import --- file System 选择你的blazeds.war解压成一个文件夹 完成 新建类..._java整合flex开发入门

TQ15EG开发板教程:开发板Vivado硬件设置_vivado ddr4 频率设置-程序员宅基地

文章浏览阅读884次,点赞27次,收藏24次。(0)Cas Wirte xx: 这里是设置的12就可以,从上图看出DDR2400,这里要看他支持那些,这里选择常用的12。在 Output Clocks 窗口,如果不是 IOPLL,改成 IOPLL,保持一致,用同样的 PLL。我们按照2400的频率来配置;下面是几个比较重要的时间,然后其实都是在手册里面,然后还是先找到对应的83E,然后找到你要的时间。(2)位宽看你选择的是512x16还是1Gx8,这里我们选择是前者,所以16。第六步,配置PS端的高速外设以太网,usb,dp,sata接口。_vivado ddr4 频率设置

解决Qt5出现qt5ct using qt5ct plugin qt5ct d-bus global menu no_qt5ct: using qt5ct plugin-程序员宅基地

文章浏览阅读4.4k次。文章目录1.问题描述2.解决方案1.问题描述在Ubuntu系统下使用GMT绘图时出现:2.解决方案百度了一下发现大多没有解决我的问题,而且关于这个bug的问题似乎讨论的比较少。所以,通过科学上网后我寻找到了解决方案(我的解决啦,各位可以尝试一下),另外,提示:Qt5移除了相应的configure文件,可能会出现找不到相应文件的情况。你可以将下面代码写入环境变量中(我写入的是~/.profile文件中),source一下就可以啦,source不起作用可以重新登陆用户。export QT_LOG_qt5ct: using qt5ct plugin

线程&线程池&异步编排_arrayblockingqueue<>(100000)-程序员宅基地

文章浏览阅读212次。线程、线程池创建使用、异步编排_arrayblockingqueue<>(100000)

kafka_14_集成 flume-程序员宅基地

文章浏览阅读136次。前置条件kafka 集群软件信息网盘下载地址链接:https://pan.baidu.com/s/1b5DjLQBmbz_8Nh7DyLj2BQ提取码:gin1install当前安装演示版本apache-flume-1.9.0-bin.tar.gzinstall# 解压tar -zxf apache-flume-1.9.0-bin.tar.gz -C /home/kafka/# 查看cd /home/kafka/apache-flume-1.9.0-bin/l