phpcms中的单例模式

phpcms中应用单例模式的地方有几处,其中数据库连接是最重要的,让我们看看phpcms中数据库工厂类(单例模式):

public static function get_instance($db_config = '') {

    if($db_config == '') {

        $db_config = pc_base::load_config('database');

    }

    if(db_factory::$db_factory == '') {

        db_factory::$db_factory = new db_factory();

    }

    if($db_config != '' && $db_config != db_factory::$db_factory->db_config) db_factory::$db_factory->db_config = array_merge($db_config, db_factory::$db_factory->db_config);

    return db_factory::$db_factory;

}

数据库工厂类具体文件在..libs/classes/db_factory.class.php

在model.class.php中调用数据库工厂类:

 热烈庆祝我爱大冶网开通,欢迎访问!http://www.dayecn.com

public function __construct() {

    if (!isset($this->db_config[$this->db_setting])) {

        $this->db_setting = 'default';

    }

    $this->table_name = $this->db_config[$this->db_setting]['tablepre'].$this->table_name;

    $this->db_tablepre = $this->db_config[$this->db_setting]['tablepre'];

    $this->db = db_factory::get_instance($this->db_config)->get_database($this->db_setting);

}

单例模式: 在任何时候, 程序中都仅有该类的一个实例. 好处是可以防止我们去打开数据库的多个连接避免过多的浪费系统资源.
单例模式的类要求它不能被外部通过构造函数实例化(也即是通过new关键字), 它只能被自身实例化.所以, 一般来说,单例类需满足:
1. 拥有一个构造函数, 并且是私有的.
db_factory类的构造函数虽然不是私有, 但时刻注意不要在类外通过构造函数实例化, 也算是满足单实例的条件.
2. 拥有一个保存类实例的静态成员.
db_factory类的db_factory成员便是这样一个静态成员变量.
3. 拥有一个访问这个实例的公有的静态方法.
该方法是单例类的实际构造, 它会检查上述静态变量是否已经保存这个类的实例. 如果没有, 则新建一个实例.并保存到上述静态变量中.
db_factory类的get_instance方法便是这样的一个静态方法.
工厂模式: 工厂类允许我们基于程序逻辑来决定实例化哪一个类.
工厂类要求有一个根据条件实例化其他类的方法. db_factory的connect方法便是这样子的.
(以上部分转自:http://whitepig.sinaapp.com/archives/377)

大致了解phpcms中php的单例模式——数据库工厂类。

(转正请注明出处: http://www.tantengvip.com/2014/05/phpcms-getinstance/ )

热烈庆祝我爱大冶网开通,欢迎访问!http://www.dayecn.com

你可能感兴趣的:(phpcms)