单例设计模式特点: 1.在用户量大的应用中,会有大量的数据库操作。使用单例模式可以避免新操作消耗大量资源。 2。使用单例设计模式,可以全局控制一些配置信息,方便调试。单例设计模式只有一个入口,所有代码都集中在一个类中,便于定位问题。单例模式的特点: 1。一个类只能有一个类对象(只能实例化一个对象) 2。它必须自己创建这个实例 3。它必须自己提供整个系统这个实例 4。构造函数和克隆函数必须声明为私有的。这是为了防止外部程序创建新类从而失去单例模式的意义 5。getInstance()方法必须声明为public,必须调用该方法返回唯一实例的引用 6,有一个静态成员变量 保存类的一个实例7,PHP的单例模式是相对的,因为PHP的解释运行机制使得每个PHP页面解释执行后,所有相关资源都会被回收 8。有一个publicstatic方法来访问这个实例(getInstance()方法通常用于实例化单例类,instanceof操作符可以用来检测类是否已经被实例化) 另外需要创建一个__clone()方法来防止对象被复制(克隆)classRedis{/***实例化对象,单例模式。*@var\iphp\db\Redis*/staticprivate$_instance=array();私有函数__construct($config,$attr=array()){if(!extension_loaded('redis')){E(L('_NOT_SUPPORT_').':redis');}$this->attr=array_merge($this->attr,$attr);$this->port=$config['REDIS_PORT']?$配置['REDIS_PORT']:6379;$this->host=$config['DB_HOST'];$this->redis=new\Redis();$this->redis->connect($this->host,$this->port,$this->attr['timeout']);如果($config['auth']){$this->auth($config['auth']);$this->auth=$config['auth'];}$this->expireTime=time()+$this->attr['timeout'];}/***获取静态实例化的对象。*为每个数据库建立连接*如果连接超时,将重新建立连接*/publicstaticfunctiongetInstance($config,$attr=array()){if(!self::$_instance||!(self::$_instanceofself)){self::$_instance=newself($config,$attr=array());}返回自我::$_实例;}//停止被克隆私有函数__clone(){}}
