Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在类中使用$this从空值创建默认对象_Php_Exception_Pdo - Fatal编程技术网

Php 在类中使用$this从空值创建默认对象

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:

我使用的是PHP 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) {
        $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错误报告?