PHP 单例模式

时间:2009-10-14     作者:smarteng     分类: PHP相关


PHP的面向对象的功能越来越强,

学习了一下设计模式,看看PHP中的单例模式的实现。

单例模式有以下特点:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一的实例。
  3. 单例类必须给所有其他对象提供这一实例。[break]

一个经典的实现:

class Singleton{

protected static $_instance = null;

public static function getInstance()
{
    if (null === self::$_instance) {
        self::$_instance = new self();
    }

    return self::$_instance;
}

}

好,下面我们就可以取得这个单例了

$va = Singleton::getInstance();

一个数据库类单例模式:

class Db 

    /**
     * @access private
     */  
   private function __construct() 
    { 
            $this->conn = mysql_connect(DB_HOST, DB_USER, DB_PWD); 
            if(!$this->conn) 
            { 
                die("Connect DB error!"); 
            } 
            mysql_select_db(DB_NAME); 
    } 
    /**
     * 使用 $db = & Db::getInstance() 来构建一个DB连接,而不是使用$db = new Db();
     * 如果使用php5,可以把Db的构造函数__construct声明为private,这样在程序级强行在程序只能使用getInstance来构建,
     * 但考虑兼容的代码,在php4中就只能简单的靠程序员自己来自觉遵守了。
     */ 
   public static function  getInstance() 
    { 
            if (!DB :: $instance) 
            { 
                    DB :: $instance = new Db(); 
            } 
            return DB :: $instance; 
    } 
    /**
     *其他的函数等等
     */ 
    function query($query) 
    { 
       //Your code here 
    } 

?>