这是我的代码
<?php
class db extends PDO {
private $error; private $sql; private $bind; private $errorCallbackFunction; private $errorMsgFormat;
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();
}
}
但该行$this->error = $e->getMessage();
显示的错误如此
警告:在C:\ Program Files中从空值创建默认对象 第14行的(x86)\ Ampps \ www \ blog \ library \ class-database.php
我已经创建了这样的代码
$db = new db("mysql:host=localhost;port=3306;dbname=".$dbname, $dbusername, $dbpassword);
并且测试其他值是正确的,除了$ dbname,因为我想向用户显示他们插入了错误的数据库详细信息。
答案 0 :(得分:-1)
我正在尝试为此找到文档,但基本上似乎在对$引用中抛出异常之后,将其设置为null。例如,如果你在$ this-&gt;错误之前print_r($ this),你就什么也得不到。
我能想出的最好的解释方法是source code for the PDO extension,如果出现错误,似乎设置了对象to null。
无论如何 - 在构造函数中隐藏(捕获)可能导致无效状态的异常是不好的做法。我建议只需从构造函数中删除try catch并将其放在实例化对象的任何地方(应该只在应用程序中使用一次)。然后你可以适当地处理这个异常(最有可能退出应用程序)。
或者,您可以封装PDO类而不是扩展它。
此外,这个特定的代码剪切并不会激发您对正在使用的包装器的极大信心。您可能希望了解完全成熟的ORM,例如doctrine或propel。