PHP_单例模式、实例代码
2024-10-20 08:26:55
在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);
最新文章
- iOS 大文件断点下载
- <;java基础学习>;JAVA 对象和类
- 定时自动关闭messagebox
- 传智168期JavaEE就业班 day05-XML 约束与解析
- oracle 基本操作
- windows向ubuntu过渡之常用软件安装
- C#自定义线程池
- Swift - 06 - 数值类型转换和类型别名
- BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
- 开心菜鸟系列学习笔记------javascript(5)
- Maximum Depth of Binary Tree 解答
- MEF初体验之三:Exports声明
- 基于Linux平台病毒BlackHole病毒的决心
- EF POWER TOOLS由数据库逆向CODE FIRST
- MySQL慢查询日志
- 深入.NET数据类型(1)
- vi命令加行号查找替换等命令
- UNIX网络编程——客户/服务器程序设计示范(二)
- 高并发系统保护~ing
- 【MM系列】SAP里批量设置采购信息记录删除标记