我想知道你是否可以帮助我......
我有两个类,一个扩展另一个类.B类将被各种不同的对象扩展并用于常见的数据库交互。现在我希望B类处理它的连接和断开而没有来自A类或任何方向的指示外部输入..
我所理解的问题是扩展类不会自动运行其__construct函数..有没有办法解决这个问题?
提前致谢..
class a extends b
{
public function __construct()
{
}
public function validateStuff()
{
$this->insert_record();
}
}
class b
{
public function __construct()
{
$this->connect();
}
protected function connect()
{
return true;
}
public function insert_record()
{
return true;
}
}
答案 0 :(得分:76)
如果您实例化子类a,,则在类b中定义的父__construct()
方法将自动运行,除非在类a中定义了__construct()
方法。
class a extends b {
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new a();
如果在类a中定义了__construct()
方法,那么这将覆盖在类b中使用__construct()
方法....它将运行而不是 b类__construct()
方法
class a extends b {
public function __construct()
{
echo 'In A Constructor';
}
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new a();
因此,如果您的子类定义了__construct()
方法,那么如果您想要执行该方法,则需要显式调用父类的构造函数。
class a extends b {
public function __construct()
{
parent::__construct();
echo 'In A Constructor';
}
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new a();
答案 1 :(得分:10)
我不确定我完全理解你在问什么,但你可以从孩子的构造函数中调用parent构造方法
parent::__construct();
这是我所知道的唯一选择。
答案 2 :(得分:4)
在parent::__construct()
中致电a::__construct()
:
class a extends b
{
public function __construct()
{
parent::__construct();
}
public function validateStuff()
{
$this->insert_record();
}
}
如果你没有做任何具体的事情,你可以完全省略一个构造函数。