Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 OOP问题:对非对象调用成员函数prepare()_Php_Oop_Pdo - Fatal编程技术网

Php OOP问题:对非对象调用成员函数prepare()

Php OOP问题:对非对象调用成员函数prepare(),php,oop,pdo,Php,Oop,Pdo,我正在尝试使用PDO,因此我将它放在数据库类的getter中: class Database { // dsn, username and password here private $mysql; public function __construct(){ $mysql = new PDO($this->dsn, $this->dbUsername, $this->dbPassword); $mysql->

我正在尝试使用PDO,因此我将它放在数据库类的getter中:

class Database {

    // dsn, username and password here

    private $mysql;
    public function __construct(){
        $mysql = new PDO($this->dsn, $this->dbUsername, $this->dbPassword);  
        $mysql->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->mysql = $mysql;
    }

    public function database(){
        return $this->mysql;
    }

}
我这样调用数据库方法:

class Router extends Database {

    public function loggedin(){

            $query = $this->mysql()->prepare('SELECT * ...');
            $query->execute(array(...));
            ...

}
但是,我不断得到以下错误:

Fatal error: Call to a member function prepare() on a non-object 
我问过比我更了解这一点的人,但是我仍然不明白为什么这不起作用。非常感谢任何帮助和解释(CS学生;-我更好地理解原因!)


谢谢

您正在使用
private
access修饰符
private$mysql。将其更改为
protected$mysql

我的一个朋友向我展示了一个与此非常相似的建议:。这是解决这个问题的最好方法吗?我相信我在尝试这个sln时仍然遇到了与上面相同的错误。您是否知道在编程中
extends
代表is a。您所定义的是:“每个路由器都是一个数据库”。可能只有我一个人,或者听起来有点神经质。另一件事是:你真的不应该为路由器的每个实例建立一个新的DB连接。相反,您应该在构造函数中注入PDO实例。可能会给出一些关于“如何”的提示。@tereško为什么这个特定的代码不能按预期工作以及为什么它设计得很糟糕是两件不同的事情。关于设计问题,这里有一个不错的网站。无论如何,好的评论。实际上,对于“设计问题”有。为什么你认为我写这篇文章是作为评论而不是回答?还是你认为评论时间太长了。。关于这个问题:好的,谢谢。现在变得更有意义了。爱这个地方:-)你知道这有什么意义,我没意识到他延长了课程,+1