MySQLi奇怪的错误

时间:2016-03-26 13:52:36

标签: php class oop mysqli extends

我正在尝试扩展MySQLi类。

<?php

class DataManager extends mysqli {

    private $username = "me";
    private $password = "notgonnatellyou";
    private $dbname = "data";
    private $host = "sql.my";

    public function __construct() {
        return connect();
    }

    private function connect() {
        $connection = parent::__construct($host,$username,$password,$dbname);
        return $connection;
    }

    public function query($query) {
        autocommit(false);
        if (!($do = parent::query($query))) {
            rollback();
            return false;
        }
        else {
            commit();
            return $do;
        }
    }
}

?>

现在我收到以下错误:

  

致命错误:第37行/me/datamanager.php中DataManager :: connect()的访问级别必须是公共的(如类mysqli中所示)

我不明白为什么它应该公开......如果我把它公之于众,那就说

  

调用未定义的函数connect()

但是如你所见,我刚刚完成了这个功能......

1 个答案:

答案 0 :(得分:0)

您的第一个问题是,您无法增加从基类继承的方法的隐私。如果您有一个mysqli的实例,并希望在其上调用connect,那么如果它出乎意料地私有,您会感到惊讶。这就像拥有一个没有在子类中实现的抽象方法的类。

@devpro在评论中指出的第二个问题是,您必须将connect称为$this->connect();,而不仅仅是connect()

您可能会发现构造函数无法返回值。 &#34;返回值&#34;构造函数始终是实例化类型。

此外,您对字段的引用也是错误的。您需要使用$this->host$this->username