MySQLi 奇怪的错误

MySQLi strange errors

我正在尝试扩展 MySQLi class。

<?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;
        }
    }
}

?>

现在我收到以下错误:

Fatal error: Access level to DataManager::connect() must be public (as in class mysqli) in /me/datamanager.php on line 37

我不明白为什么它应该是 public...如果我做到了 public,它会说

Call to undefined function connect()

但是如你所见,我只是实现了那个功能...

您的第一个问题是您无法增加从基 class 继承的方法的隐私。如果您有一个 mysqli 的实例并想在其上调用 connect,如果它出乎意料地私有,您会感到惊讶。这就像有一个 class 和一个未在子 class.

中实现的抽象方法

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

您可能会发现构造函数不能 return 值。构造函数的 "return value" 始终是实例化类型。

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