浅析php单例模式
《PHP实战:浅析php单例模式》要点: 本系列文章来总结一下设计模式在PHP中的应用,这是第一篇创立型模式之单例模式.PHP实例 一、设计模式简介 二、提炼设计模式的几个原则:PHP实例 开闭原则:模块应对扩展开放,而对修改关闭. 三、设计模式的功用?PHP实例 设计模式能办理 四、设计模式分类
代码如下:
???? /** ???? * 单例模式 ???? */ class DbConn { ?????? private static $_instance = null; ?????? protected static $_counter = 0; ?????? protected $_db; ?????? //私有化构造函数,不允许外部创建实例 ?????? private function __construct() ?????? { ????????????? self::$_counter += 1; ?????? } ?????? public function getInstance() ?????? { ????????????? if (self::$_instance == null) ????????????? { ???????????????????? self::$_instance = new DbConn(); ????????????? } ????????????? return self::$_instance; ?????? } ?????? public function connect() ?????? { ????????????? echo "connected: ".(self::$_counter)."n"; ????????????? return $this->_db; ?????? } } /* ?* 不使用单例模式时,删除构造函数的private后再测试,第二次调用构造函数后,_counter变成2 */ // $conn = new DbConn(); // $conn->connect(); // $conn = new DbConn(); // $conn->connect(); //使用单例模式后不能直接new对象,必须调用getInstance获取 $conn = DbConn::getInstance(); $db = $conn->connect(); //第二次调用是同一个实例,_counter还是1 $conn = DbConn::getInstance(); $db = $conn->connect(); 特别说明:这里getInstance里有if判断然后再生成对象,在多线程语言里是会有并发问题的.例如java的解决方案有二个,给办法加上synchronized关键词变成同步,或者把_instanc的初始化提前放到类成员变量定义时,但是这2种方式php都不支持.不过因为php不支持多线程所以不需要考虑这个问题了.PHP实例 小伙伴们是否对php设计模式的单例模式有所了解了呢?下一篇文章我们来介绍下工场模式.PHP实例 编程之家培训学院每天发布《PHP实战:浅析php单例模式》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |