喜悦国际村 » PHP高级编程 » 扩展PDO的问题,出现500错误,请问为什么?

页: [1]
x2008-5-7 10:50 AM
扩展PDO的问题,出现500错误,请问为什么?

首先说明下,在不扩展的情况下直接使用PDO类,一切正常。下面的代码是我使用单件模式扩展PDO的代码

DB.class.php
[php]<?php
/*
* PDO扩展类
*
*/
class DB extends PDO {
    //私有的静态变量,保存唯一的DB实例
    private static $instance = NULL;
   
    //数据库配置
    private $dsn = _DSN_;
    private $db_user = _DB_USER_;
    private $db_pass = _DB_PASS_;
    private $options = array(parent::ATTR_PERSISTENT => true);//建立持久连接
   
    //
    private $fetch_mode = parent::FETCH_ASSOC;

    //私有的构造函数,防止用于外部直接实例化DB类
    private function __construct() {
            parent::__construct($this->dsn, $this->db_user, $this->db_pass, $this->options);
    }
   
    //获得实例的唯一入口
    public static function getInstance() {
            if (self::$instance === NULL) {
                self::$instance = new DB();
            return self::$instance;
        }
        return self::$instance;
    }
   
   
    //设置fetch模式
    public function setFetchMode($fetch_mode) {
        $this->fetch_mode = $fetch_mode;
    }
   
    //
    public function query($sql) {
        $stmt = parent::query($sql);
        if($stmt) {
            $stmt->setFetchMode($this->fetch_mode);
        }
        return $stmt;
    }
   
    //析构函数
    function __destruct() {
        //
    }
   
    //克隆函数
    function __clone() {
        trigger_error("不允许CLONE", E_USER_ERROR);
    }
}
?>[/php]

然后我在别的文件中直接DB::getInstance()调用,出现500错误,经我测试,问题可能出现在构造函数中

百思不得其解:Q:Q:Q:Q

[[i] 本帖最后由 x 于 2008-5-7 06:58 PM 编辑 [/i]]

x2008-5-7 11:23 AM
问题解决,构造函数设置成public就行了,但这样的话,还用单件模式也就没意思了.

为什么我不能使用私有的构造函数?

[[i] 本帖最后由 x 于 2008-5-7 07:27 PM 编辑 [/i]]

ctrlming2008-5-7 02:41 PM
私有构造函数能实例化吗?我也是问一下。
楼下指点

x2008-5-8 12:58 AM
回楼上,私有的构造函数,只有在类内部才能实例化,但是我发现PDO这个类有点问题,不知道为什么?我扩展自己的类,用私有构造函数没问题。但是就是扩展PDO,用私有构造就不行


查看完整版本: 扩展PDO的问题,出现500错误,请问为什么?


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.005844 second(s), 2 queries