PHP_单例模式、实例代码_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHP_单例模式、实例代码

PHP_单例模式、实例代码

 2017/9/22 17:38:20  errenzhuan  程序员俱乐部  我要评论(0)
  • 摘要:在PHP中实例化一个对象,就会新开辟一个新内存空间,当一些业务要实例化多个对象时,会占用大量内存。这个问题可以用单例模式解决。我们实例化对象可以直接new出来,也可以通过类中的构造函数__construct、析构函数__destruct、克隆__clone来实现,我们可以将这3个函数私有化,不让外部这样实例化对象;然后设置一个公共静态方法,通过类名调用。这是“三私一公”。具体代码如下:复制代码1<?php23//先创建一个类,后面调用4classA{56
  • 标签: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);
发表评论
用户名: 匿名