页:
[1]
|
扩展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]] |
|
问题解决,构造函数设置成public就行了,但这样的话,还用单件模式也就没意思了.
为什么我不能使用私有的构造函数?
[[i] 本帖最后由 x 于 2008-5-7 07:27 PM 编辑 [/i]] |
| ctrlming | 2008-5-7 02:41 PM |
|
私有构造函数能实例化吗?我也是问一下。
楼下指点 |
|
| 回楼上,私有的构造函数,只有在类内部才能实例化,但是我发现PDO这个类有点问题,不知道为什么?我扩展自己的类,用私有构造函数没问题。但是就是扩展PDO,用私有构造就不行 |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.005844 second(s), 2 queries |