是否可以在父构造函数之前调用子方法?
我在子类中有定义变量的方法,然后传递给父类。在父类接收变量之后,它将应用于类中的各种属性。
这是我的相关代码。
父类
class CParent
{
private $arrMember = array();
private $mark;
function CParent{
/*
* If parent constructor run first, init() method'll get blank array.
*/
$this->setAttr();
}
protected function init(){ return array(); }
private function setAttr(){
$arr = $this->init();
foreach ($arr as $item){
array_push($this->arrMember, $item['name']);
if (isset($item['mark']) && $item['mark'] == TRUE)
$this->mark = $item['name'];
}
}
}
儿童班
class CChild extends CParent
{
/*
* I'd like to define variable within this method then pass to parent class.
*/
protected function init(){
return = array(
array('name' => 'v1', 'mark' => true),
array('name' => 'v2'),
array('name' => 'v3')
);
}
}
答案 0 :(得分:1)
您需要覆盖子项中的父构造函数。
public function __construct(){
$this->setAttr();
}
如果不覆盖父构造函数,则在实例化子项时将调用它。但是,如果覆盖它,只有在从子构造函数执行parent::__construct()
时才会调用它。