在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);

最新文章

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

热门文章

  1. 【单片机】通过定时器实现模拟任意路PWM通道(带实例和计算方法)
  2. Pulsar负载均衡原理及优化
  3. 12月2日内容总结——边框属性,display属性,css盒子模型,浮动、溢出、定位、z-index属性和建议博客页面搭建
  4. zookeeper06-watcher四字命令
  5. 万字长文概述单目3D目标检测算法
  6. RocketMQ - 生产者启动流程
  7. 三分钟使用chatGPT
  8. Postgresql 定制执行计划pg_hint_plan
  9. PostgreSQL建立索引时,如何避免写数据锁定
  10. IDEA 上传项目到 Gitee 小记