介绍
怎样实现php单例模式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
php实现单例模式的方法:首先创建静态私有的变量保存该类对象,然后防止使用新的直接创建对象,接着防止使用克隆克隆对象,最后判断【美元实例】是否是单例的对象,不是则创建即可。
引用><强> php实现单例模式的方法:强>
单例模式的定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。
php实现单例模式:
类单例 {//创建静态私有的变量保存该类对象 静态私人美元实例;//防止使用新的直接创建对象 私有函数__construct () {}//防止使用克隆克隆对象 私有函数__clone () {} 静态公共职能getInstance () {//判断美元实例是否是单例的对象,不是则创建 如果(!自我::$实例instanceof自我){ 自我::$实例=新自我(); } 返回self:: $实例; } 公共功能测试() { 回应“我是一个单例模式“; } } $唱歌=单:getInstance (); 美元唱→测试(); sing2美元=new Singleton ();//致命错误:未捕获错误:呼吁私人单::__construct()从无效的上下文 sing3=克隆美元歌唱;//致命错误:未捕获错误:呼吁私人单::__clone通过上下文()<强> PHP实现单例模式有什么意义:强>
没有意义,PHP没有线程概念,没有异步代码,不会常驻内存,所有的修改自己都可以控制,不需要保证类只有一个实例,有什么意义?你要在数据库连接类中使用单例模式,万一有的页面需要连接两个数据库怎么办?
真的没有意义吗?
当然不是。
看下代码:
类 { 公共函数显示() { 回应“我是一个类函数,要调用B类函数和C类函数& lt; br/在“; $=new b (); b→美元显示(); $ c=new c (); $ c→显示(& # 39;一个# 39;); } } B类 { 公共函数显示() { 回应“我是B类函数,要调用C类函数& lt; br/在“; $ c=new c (); $ c→显示(& # 39;b # 39;); } } C类 { 公共函数显示(改) { 回应“我是C类函数,现在被{$ parm}类函数调用& lt; br/在“; } } 美元=new (); 美元→显示();这里调用的过程中,创建了两个C类对象,我们知道,新是很耗资源的一种操作,如果这里C类是单例模式,只新一次就行了,这个想法是可以的,但我们一般用另外一种方法来做:
类 { 公共函数显示() { 回应“我是一个类函数,要调用B类函数和C类函数& lt; br/在“; $ b=单位::getInstance (& # 39; b # 39;); b→美元显示(); $ c=单位::getInstance (& # 39; c # 39;); $ c→显示(& # 39;一个# 39;); } } B类 { 公共函数显示() { 回应“我是B类函数,要调用C类函数& lt; br/在“; $ c=单位::getInstance (& # 39; c # 39;); $ c→显示(& # 39;b # 39;); } } C类 { 公共函数__construct () { 回声“C类对象被创建& lt; br/在“; } 公共函数显示(改) { 回应“我是C类函数,现在被{$ parm}类函数调用& lt; br/在“; } } 类的单位 { 静态公共职能getInstance(类) { 静态的arr美元=零; 如果(!收取(arr美元[$类])| | ! arr[$类]instanceof美元类){ arr[$类]=新类美元(); } 返回arr美元(美元类); } } 美元=new (); 美元→显示();执行代码可以看到,C类只被实例化了一次,再实际操作中,我们一般使用静态变量保存对象,变相实现单例模式。
<强>单例模式和使用静态变量实现单例的区别:强>
单例模式强制类只能创建一个对象,一般是安全或者统一界面展示的时候会用的到,而静态变量实现单例主要是为了减少新操作,并不能阻止新和克隆操作。
引用>
怎样实现php单例模式