希望这个标题有意义,希望我的问题也可以。
所以我需要在我网站上每个页面的开头实例化一个Sql类,这样所有其他类都可以拥有一个有效的mysql资源来进行查询,更新等,而无需创建多个Sql对象。 但是,目前我的类根据类上下文为不同的函数实现扩展了一个抽象类。
问题:在抽象类的子代中,我可以使用parent::_construct
绕过抽象超类并实例化抽象扩展的Sql类吗?
EX。
class Sql {
function _construct() {
//get valid db resource
}
function query() {
//// query code
}
}
abstract class Display extends Sql {
function show() {
return $this->displayRecipe();
}
abstract function getRecipe();
}
class Members extends Display {
function __construct() {
parent::__construct();
}
function getRecipe($member_id) {
return $this->query("select * from recipes where member=$member_id");
}
}
正如您所看到的,我现在需要使用Sql类的function query()
,这是一个granparent类。但是,如果在中间使用抽象类,是否会抛出异常并中断?
答案 0 :(得分:1)
是的,它会起作用:
Class Person{
public $age;
public $name;
public $school;
public function __construct($age,$name,$school){
$this->age = $age;
$this->name = $name;
$this->school = $school;
echo "It works!";
}
}
abstract class Student extends Person{
}
class UniversityStudent extends Student{
public function __construct($age,$name,$shcool){
parent::__construct($age,$name,$school);
}
}
$x = new UniversityStudent(20,"Paul","ULA");
echo $x->age;
答案 1 :(得分:1)
您发布的代码应该可以正常工作,因为类成员中的构造函数将运行父parent::__construct()
的构造函数,它将在Sql
中运行构造函数,因为__construct未在类Display中重载
我希望我解释得那么好,但试一试:) 只需确保您的构造方法在Sql类中有2个下划线;它在您发布的代码中只有1个。