当前位置: 首页 > 后端技术 > PHP

【PHP实现设计模式】单例模式

时间:2023-03-29 14:19:20 PHP

单例模式是最常用也是最简单的设计模式。什么是单例模式?它是一个特殊的类,在系统运行时只有一个实例。此类必须提供获取对象实例的方法。有什么作用?1.全局只创建一个实例,提高性能,减少资源消耗。2.自己统一创建实例,具有可控性和其他防范措施。1.必须保证一个运行周期内只存在一个实例,所以任何新的实例都会被创建方法必须禁用(设为私有)1)禁止外部创建实例2)禁止实例克隆2.不要滥用单例模式代码示例classRedisLogic{privatestatic$_instance=null;静态$数据=[];/***单例类构造函数。*禁止外部创建实例**/privatefunction__construct(){}/***禁止克隆**@throws\Exception*/privatefunction__clone(){thrownew\Exception('单例模式,不允许克隆');}/***禁用序列化**/privatefunction__sleep(){}/***禁用反序列化**/privatefunction__wakeup(){}publicstaticfunctiongetInstance(){if(self::$_instance==null){self::$_instance=newself();}返回自我::$_实例;}/***@paramstring$key*@paramstring$extend*@paramint$type*@paramarray$options*@returnmixed*/publicfunctionread($key,$extend='',$type=1,$options=[]){global$cur_lang;$relKey=$this->getKey($key,$extend,$type);如果(isset(static::$data[$relKey])){returnstatic::$data[$relKey];}//...省略业务代码returnstatic::$data[$relKey]=$value;}publicfunctionwrite($key,$data,$options=[],$extend='',$type=1){$relKey=$this->getKey($key,$extend,$type);//...省略业务代码}/***@param$key*@paramstring$extend*@paramint$type扩展类型,1为扩展,2为前面*@returnint*/privatefunctiongetKey($key,$extend='',$type=1){if(empty($extend)){return$key;}返回$type==1?$键。$扩展:$扩展。$键;}}demo禁止序列化,在某些情况下可能需要这样,可以参考鸟哥的这篇文章。经测试,在php5下Serialize/Unserializedestroysingletons是有效的。