PHP_单例模式、实例代码
在PHP中实例化一个对象,就会新开辟一个新内存空间,当一些业务要实例化多个对象时,会占用大量内存。这个问题可以用单例模式解决。
我们实例化对象可以直接new出来,也可以通过类中的构造函数 __construct 、析构函数 __destruct、克隆__clone来实现,我们可以将这3个函数私有化,不让外部这样实例化对象;然后设置一个公共静态方法,通过类名调用。这是“三私一公”。
具体代码如下:
1 <?php
2
3 //先创建一个类,后面调用
4 class A {
5
6 }
7
8 //创建单例类
9 class One{
10 //设置一个私有静态的属性,用于保存对象
11 private static $obj;
12
13 //将构造方法私有化
14 private function __construct(){
15 }
16
17 //创建一个公共的静态方法,静态方法是为了直接通过类名调用
18 static function getObj($className){
19 /**
20 * instanceof 看一个对象是否属于这个类
21 *如果实例化的对象属于这个类
22 */
23 if(self::$obj instanceof $className){
24 //就把这个对象返回
25 return self::$obj;
26 }else{
27 //如果否,就实例化这个对象再返回
28 self::$obj = new $className;
29 return self::$obj;
30 }
31 }
32
33 //将克隆私有化
34 private function __clone(){
35 }
36 }
37
38 //测试
39 //无论实例化多少次类A,都只会得到一个对象
40 $one1 = One::getObj('A');
41 $one2 = One::getObj('A');
42 $one3 = One::getObj('A');
43 var_dump($one1);
44 var_dump($one2);
45 var_dump($one3);
PHP_单例模式、实例代码的更多相关文章
- C++11 变长模版和完美转发实例代码
C++11 变长模版和完美转发实例代码 #include <memory>#include <iostream>#include <vector>#include ...
- PHP读取超大文件的实例代码
数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机 去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- junit基础篇、中级篇-实例代码
学习文章: http://blog.csdn.net/andycpp/article/details/1327147 http://wenku.baidu.com/link?url=C27gDEj0l ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码
seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...
- 后台接受ajax传递值的实例代码
后台接受ajax传递值的实例代码: 使用ajax可以实现无刷新数据交互,下面是一段后台代码接收ajax传递值的实例代码供需要的朋友参考,希望能够带来帮助. ajax代码如下: $(function ( ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
- jquery ajax jsonp跨域调用实例代码
今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...
随机推荐
- 【Android】Android 源码方式使用 opencv 库文件
使用方法 opencv 官方的 SDK 已经有编译好的 so 库,我们可以直接使用,因此我们只需要将平台架构对应的 so 库文件以及头文件提取出来,使用 Android.mk 进行预安装,然后在需要使 ...
- 中断ISR技术架构
架构一 ISR采用立即响应思路,技术架构如下图: 优点:简单. 缺点:处理性能不高,中断优先级规划性不高(仅仅区分CPU的32个优先级别,针对不同类型中断优先级不支持). 选型:对于硬件支持多级中断的 ...
- Oracle ADG环境下的RMAN备份策略
作为IT运维人员,尤其是数据库岗位,数据的备份重于一切. 现在很多用户会有一个普遍误区,认为现在类似ADG这类灾备已经很完善,且实时性也更佳,往往就忽略了传统的备份效用. 但实际上,我们千万不能因为有 ...
- git02 IDEA使用git
1 定位 Git 程序 2 初始化本地库 选择要创建 Git 本地仓库的工程. 3 添加项目到暂存区 右键点击项目选择 Git -> Add 将项目添加到暂存区 4 提交到本地库 5 切换版本 ...
- 使用 shell 脚本拼接 srt 字幕文件 (srtcat)
背景 前段时间迷上了做 B 站视频,主要是摩托车方面的知识分享.做的也比较粗糙,就是几张图片配上语音和字幕进行解说.尝试过自己解说,发现录制视频对节奏的要求还是比较高的,这里面水太深把握不住.好在以 ...
- 如何让程序更健壮「GitHub 热点速览」
对于 ML 模型训练而言,好的数据集能让结果更健壮,cleanlab 是一个降低数据噪音,及时帮你修正数据集错误的工具.好的工具能让你的结果更完美.同样的,RedTeam-Tools 提高了渗透测试的 ...
- UBUNTU16.04卸载安装protobuf
1.卸载 sudo apt-get remove libprotobuf-dev which protoc 然后删除路径即可 2.安装 sudo apt-get install autoconf au ...
- Unreal 各种指针类型是怎么回事
引言 读完本篇文章,你会了解为何UE中C++作为其开发语言,使用的指针,为何各式各样. 你需要对UE有所了解,如果不了解也没关系,也可以看下这篇文章,就当了解一下最复杂的应用的系统指针设计是如何. 可 ...
- react中Hooks的理解和用法
一.Hooks是什么? Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是 ...
- LG P2839 [国家集训队]middle
\(\text{Solution}\) 不考虑起点区间和终点区间的限制,求区间中位数 可以二分中位数,大于等于中位数的位置赋为 \(1\),小于的位置赋 \(-1\) 当区间和大于等于 \(0\) 时 ...