Php 在类中使用$this从空值创建默认对象
我使用的是PHP PDO包装器类的一个细微变化: 这是我正在使用的新构造函数:Php 在类中使用$this从空值创建默认对象,php,exception,pdo,Php,Exception,Pdo,我使用的是PHP PDO包装器类的一个细微变化: 这是我正在使用的新构造函数: public function __construct($dsn, $user='', $passwd='') { $options = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); try { parent:
public function __construct($dsn, $user='', $passwd='') {
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
parent::__construct($dsn, $user, $passwd, $options);
} catch (PDOException $e) {
$this->error = $e->getMessage();
}
}
error
是此类的私有变量,在类的开头,构造函数上方定义。strong文本
当我这样使用它的时候
$database = new Database(
'mysql:host=' . $config['mysql_host'] . ';port=' . $config['mysql_port'] . ';dbname=' . $config['mysql_database'],
$config['mysql_username'],
$config['mysql_password']
);
它向我显示了这个错误:从空值创建默认对象,指向数据库类文件,在$this->error=$e->getMessage()行代码>
引发异常的原因是因为我还没有设置mysql用户名和密码,所以不用担心。我试图弄清楚它为什么会出现这个错误以及如何修复它。似乎由于db类扩展了PDO,当PDO构造函数抛出异常$this时,它将变为NULL
class db extends PDO {
public function __construct($dsn, $user="", $passwd="") {
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
parent::__construct($dsn, $user, $passwd, $options);
} catch (PDOException $e) {
echo "Got PDOException\n";
var_dump($this);
}
}
}
new db('mysql:host=localhost;port=3306;dbname=something', 'invaliduser', 'invalidpass');
如果运行该代码,您将获得以下输出:
Got PDOException
NULL
为了解决这个问题,您可以删除有问题的行并检查db对象是否为null,或者删除try-catch并在实例化新db时执行异常处理。
或者,您可以重写类以将PDO对象存储在变量中,而不是扩展PDO。首先,请提供用户名和密码。你还记得那个错误吗?另外,请提供完整的错误消息,包括是否还有一些警告或通知以及异常的确切名称。是什么显示了这个错误?PHP错误报告?