我还在玩类,但不能运行这个:
class db_connection {
private $dbc;
public function __construct()
{
$this->dbc = new mysqli(HOST_ONE, USER_ONE, PASS_ONE, DB_ONE);
}
public function getDbc()
{
return $this->dbc;
}
}
class db_query extends db_connection{
private $querystring;
private $result;
function __construct ($table, $field) {
$this->querystring = $query = parent::getDbc()->query("SELECT ".$field." FROM ".$table);
$this->result = $row = $query->fetch_assoc();
}
function get_resultset() {
return $this->result;
}
}
这就是我尝试运行它的方式:
$db_conn = new db_connection();
$db = $db_conn->getDbc();
$action = new db_query('datenbanken','id');
$result = $action->get_resultset();
var_dump($result);
建立连接没有任何问题,但它不会使用我的类查询数据库。
我不会实现我可以运行查询而只需要设置
$action = new db_query('datenbanken','id');
这一行...
有人可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:2)
在覆盖扩展的类时需要调用父构造函数,所以在这种情况下
class db_query extends db_connection{
private $querystring;
private $result;
function __construct ($table, $field) {
parent::__construct(); // now we have $this->dbc constructed
$this->querystring = $query = $this->getDbc()->query("SELECT ".$field." FROM ".$table);
$this->result = $row = $query->fetch_assoc();
}
function get_resultset() {
return $this->result;
}
}
请注意,仅当您要从扩展的类中调用该函数时才使用父关键字
在你的情况下$ this会被填充,所以不需要使用parent :: getDbc(),而应该使用$ this-> getDbc()
但是,如果你压倒getDbc,你会得到:
class my_other_class extends db_connection{
function getDbc() {
// call parent funct
$res = parent::getDbc();
$res = doSomethingWithRes($res);
return $res;
}
}