博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP单例模式浅析
阅读量:5151 次
发布时间:2019-06-13

本文共 1187 字,大约阅读时间需要 3 分钟。

首先我们要明确单例模式这个概念,那么什么是单例模式呢?

单例模式顾名思义,就是只有一个实例。
作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,
这个类我们称之为

单例模式的要点有三个:

   它们必须拥有一个构造函数,并且必须被标记为private
   它们拥有一个保存类的实例的静态成员变量

   它们拥有一个访问这个实例的公共的静态方法单例类。

和普通类不同的是,单例类不能在其他类中直接实例化。单例类只能被其自身实例化。要获得这样的一种结果, __construct()方法必须被标记为private。如果试图用private构造函数构造一个类,就会得到一个可访问性级别的错误。
要让单例类起作用,就必须使其为其他类提供一个实例,用它调用各种方法。单例类不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。结果是单例类不会重复占用内存和系统资源,从而让应用程序的其它部分更好地使用这些资源。作为这一模式的一部分,必须创建一个空的私有__clone()方法,以防止对象被复制或克隆。
返回实例引用的这个方法通常被命名为getInstance()。这个方法必须是静态的,而且如果它还没有实例化,就必须进行实例化。getInstance() 方法通过使用 instanceof 操作符和self 关键字,可以检测到类是否已经被实例化。
header("Content-type:text/html;charset=utf-8");
//单例测试类
class Test {
    private $unique;
    static private $instance;//静态属性保存该类实例
      
    private function __construct(){//构造方法私有(防止外界调用)
        $this->unique=rand(0,20000);
    }
    static public function getInstance(){//静态方法提供对外接口(获取实例)
        if(!self::$instance instanceof self){
            self::$instance=new self();
        }
        return self::$instance;
    }
    private function __clone(){}//私有克隆方法,防止外界直接克隆该实例
     
}
$test=Test::getInstance();
$test2=Test::getInstance();
     
print_r($test);
print_r($test2);
     
if($test===$test2){
    echo '相等!';
}else{
    echo '不相等!';
}
结果:

转载于:https://www.cnblogs.com/sheevy/p/4010688.html

你可能感兴趣的文章
Python字符编码
查看>>
leetcode 49. 字母异位词分组(Group Anagrams)
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
js编码
查看>>
【26】java的组合与继承
查看>>
web开发,我们是否应该更加Deep Inside了?
查看>>
Pycharm Error loading package list:Status: 403错误解决方法
查看>>
steps/train_sat.sh
查看>>
TLS 1.0协议
查看>>
java递归的几种用法
查看>>
转:Linux设备树(Device Tree)机制
查看>>
iOS 组件化
查看>>
python安装win32api pywin32 后出现 ImportError: DLL load failed
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
tkinter布局
查看>>
命令ord
查看>>