浅析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设计模式的单例模式有所了解了呢?下一篇文章我们来介绍下工厂模式 。 |