我正在尝试扩展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()
但是如你所见,我刚刚完成了这个功能......
答案 0 :(得分:0)
您的第一个问题是,您无法增加从基类继承的方法的隐私。如果您有一个mysqli
的实例,并希望在其上调用connect
,那么如果它出乎意料地私有,您会感到惊讶。这就像拥有一个没有在子类中实现的抽象方法的类。
@devpro在评论中指出的第二个问题是,您必须将connect
称为$this->connect();
,而不仅仅是connect()
。
您可能会发现构造函数无法返回值。 &#34;返回值&#34;构造函数始终是实例化类型。
此外,您对字段的引用也是错误的。您需要使用$this->host
,$this->username
等