php项目中单例模式的作用有哪些

  介绍

本篇文章为大家展示了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项目中单例模式的作用有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

php项目中单例模式的作用有哪些