介绍
如何在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中使用特征对单例模式进行封装的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!