本篇文章为大家展示了php项目中单例模式的作用有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>什么是单例模式强>
单例模式顾名思义,就是只有一个实例。
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。
单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例只
<强>为什么要使用php单例模式? 强>
1, php的应用主要在于数据库应用,所以一个应用中会存在大量的数据库操作,使用单例模式,则可以避免大量的新操作消耗的资源
2,如果系统中需要有一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现。这个可以参看ZF的FrontController部分
3,在一次页面请求中,便于进行调试,因为所有的代码(例如数据库操作类db)都集中在一个类中,我们可以在类中设置钩子,输出日志,从而避免到处var_dump,回声
<强>单例类强>
1,构造函数需要标记为私人(访问控制:防止外部代码使用新操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化
2,拥有一个保存类的实例的静态成员变量
3,拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
4,另外,需要创建__clone()方法防止对象被复制(克隆)
<强> php单例模式实现方法强>
单例模式在特定的情况下可以节省资源的消耗,例如同一页面对数据库的多次操作,不需要去新多次从而节省了资源。
单例模式的关键在于php中的“运算符”,它用来检测一个变量是否是某个类的一个实例。
同时,为了防止用户去新实例,需要将“__construct”函数权限设置为私有的。
为了防止用户进行克隆,也要重写“__clone”方法。
& lt; php ?/* ,*单例数据库连接 ,*/class Db  { private 才能;static  _instance美元;,//静态可以保存值不丢失 private 才能;static  _dbConnect美元; private 才能;_dbConfig 美元;=,阵列( ,,,& # 39;主机# 39;,=祝辞,& # 39;127.0.0.1 # 39; ,,,& # 39;用户# 39;,=祝辞,& # 39;根# 39; ,,,& # 39;密码# 39;,=祝辞,& # 39;& # 39; ,,,& # 39;数据库# 39;,=祝辞,& # 39;yii2basic& # 39; );//才能保存数据库的配置信息//使才能用私人防止用新户 private 才能;function  __construct () { ,,}//重才能写克隆防止用户进行克隆 public 才能;function  __clone () { ,,,//当用户克隆操作时产生一个错误信息 ,,,trigger_error(“停下来# 39;t clone object", E_USER_ERROR); ,,},//才能由类的自身来进行实例化,(码农教程,http://www.manongjc.com 。) public 才能static function  getInstance () { ,,,如果(! (self:: $ _instance instanceof 自我)){ ,,,,,self:: $ _instance =, new 自我(); ,,,} ,,,return 自我::$ _instance; ,,} public 才能;function  connect () { ,,,self:: $ _dbConnect =, @mysql_connect ($ this→_dbConfig[& # 39;主机# 39;], ,,,,,这个→美元_dbConfig[& # 39;用户# 39;],美元这→_dbConfig[& # 39;密码# 39;]); ,,,如果(! self:: $ _dbConnect) { ,,,,,throw new 例外(“mysql  connect error" .mysql_error ()); ,,,,,//死亡(“mysql  connect error" .mysql_error ()); ,,,} ,,,mysql_query (“SET  NAMES UTF8"); ,,,mysql_select_db ($ this→_dbConfig[& # 39;数据库# 39;],self:: $ _dbConnect); ,,,return 自我::$ _dbConnect; ,,} } $ a =, Db: getInstance (); 尝试{ 美元才能→connect (); }捕捉(Exception $ e) { echo 才能,“对不起,error was 发生!”。e→美元getMessage (); }
上述内容就是php项目中单例模式的作用有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。