如何在PHP中使用特征对单例模式进行封装

  介绍

如何在PHP中使用特征对单例模式进行封装?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>单例模式的定义

确保某一个类只有一个实例,不能重复实例,只能它自己实例化,而且向整个系统提供这个实例。

<强>解决的问题

即一个类只被实例化一次,当其他人对其再次实例化时,返回第一次实例化的对象,可以避免大量的新操作,减少资源的消耗。

<强>原则:四步走,三私一公

<李>

私有化静态属性

<李>

私有化构造方法

<李>

私有化克隆方法

<李>

公有化静态方法

<强>封装背景

当项目中有多个单例类,每新建一个类,都得做三私一公的定义,就显得有些做重复工作了,不仅仅浪费时间浪费精力,而且代码臃肿且难维护,有没有更优雅的写法呢?

<强>特征来封装单例

PHP从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,PHP出了特征这个特性
用法:通过在类中使用使用关键字,声明要组合的特征名称,具体的特征的声明使用特征关键词,特征不能被实例化。

<强>代码示例

创建一个特质

& lt; ? php /* *,   ,* Trait  Singleton 单例模式,   ,*/,   Trait  Singleton    {,   ,   ,private  static  instance 美元;=,零,,   ,   ,private  function  __construct (),   {大敌;   父:才能__construct ();,//才能,私有化构造方法,   }大敌;   ,   ,private  function  __clone (),   {大敌;//才能,私有化克隆方法,   }大敌;   ,   ,public  function  __sleep (),   {大敌;//重才能写__sleep方法,将返回置空,防止序列化反序列化获得新的对象,   return 才能;[],   }大敌;   ,   ,public  static  function  getInstance (),   {大敌;   if 才能;(!收取(self::实例)美元),{,   ,,,self:: $ instance =, new 静态();//这里不能new 自我(),自我和静态区别,   ,,},   return 才能;自我::$实例,,   }大敌;   }

<>强多继承用法

其他类只用在代码中使用单例;,即可继承单例了

& lt; ? php /* *,   ,* Desc:业务类1,继承实例   ,*/,   class  YieWu1   {,   ,use 单例;//,关键一行代码   ,   ,public  function  getInfo () {   ,,//,业务代码   ,}   } & lt; ? php /* *,   ,* Desc:业务类2,继承实例   ,*/,   class  YieWu2   {,   ,use 单例;//,关键一行代码   ,   ,public  function  getInfo () {   ,,//,业务代码   ,}   }

实列调用

YieWu1:: getInstance ()→getInfo ();   YieWu2: getInstance ()→getInfo ();

看完上述内容,你们掌握如何在PHP中使用特征对单例模式进行封装的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

如何在PHP中使用特征对单例模式进行封装