在父构造函数之前调用子方法


Call child method before parent Constructor in PHP

是否可以在父构造函数之前调用子方法?

我有方法在子类中定义变量,然后传递给父类。当父类接收到变量后,它将应用于类中的各种属性。

这是我的相关代码。

父类

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')
             );
  }
}

你需要在子类中重写父类构造函数。

public function __construct(){
    $this->setAttr();
}

如果你不重写父构造函数,它将在你实例化子构造函数时被调用。然而,如果你重写它,它只会在你从子构造函数执行parent::__construct()时被调用。