您好我收到此错误
Call to a member function query() on null
Fatal error: Call to a member function query() on null
Call to member function query() on Null
但似乎都没有解决我的问题
我有db class
class DB
{
private $link;
public function __construct()
{
$this->link = new mysqli(HOSTNAME, USERNAME, PASSWORD, DBNAME);
if ($this->link->connect_error)
{
exit('Some of the database login credentials seem to be wrong.' . $this->link->connect_error);
}
}
}
然后我尝试用这个类
查询数据库class UserModel extends DB
{
private $db;
public function __construct()
{
$this->getUser();
}
public function getUser()
{
$query = $this->db->query("SELECT * FROM users");
var_dump($query);
}
}
这些文件位于site / app / model / file.php
中我在我的站点/ index.php
中实例化db答案 0 :(得分:4)
这里有几个错误:
在UserModel
类中定义自己的构造时,未运行父__construct
,其中$link
var已定义。您可以将parent::__construct();
添加到子构造函数。
在您的父类中,您有$link
变量,而不是$db
。 $link
为private
,因此在儿童课程中不可用。
固定代码
class DB
{
protected $link; // protected here
public function __construct()
{
$this->link = new mysqli(HOSTNAME, USERNAME, PASSWORD, DBNAME);
if ($this->link->connect_error)
{
exit('Some of the database login credentials seem to be wrong.' . $this->link->connect_error);
}
}
}
class UserModel extends DB
{
public function __construct()
{
// call parent construct and define $this->link
parent::__construct();
$this->getUser();
}
public function getUser()
{
// use $this->link
$query = $this->link->query("SELECT * FROM users");
var_dump($query);
}
}
答案 1 :(得分:0)
变换
私人$ link
要
受保护的$ link
这允许子类可以访问此类变量。
当然,请使用$this->link
代替$this->db