怎样实现php单例模式

  介绍

怎样实现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单例模式