-1

親コンストラクターの前に子メソッドを呼び出すことは可能ですか?

子クラスに変数を定義するメソッドがあり、親クラスに渡します。親クラスが変数を受け取ると、クラス内のさまざまな属性に適用されます。

これは私の関連コードです。

親クラス

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

1 に答える 1

1

子の親コンストラクターをオーバーライドする必要があります。

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

親コンストラクターをオーバーライドしない場合、子をインスタンス化するときに呼び出されます。ただし、オーバーライドするとparent::__construct()、子コンストラクターからのみ呼び出されます。

于 2013-06-19T03:17:23.010 に答える