2017-08-23 24 views
0

親コンストラクタを呼び出すための子クラスコンストラクタを作成することをお勧めします。子コンストラクタ内で親コンストラクタを呼び出す

class A { 
    public function __construct() { 
     echo 'I am in: '.__CLASS__.'<br/>'; 
    } 
    public function getData() { 
     echo 'I am in: '.__METHOD__.'<br/>'; 
    } 
} 

class B extends A { 

    public function __construct() { 
     parent::__construct(); 
     echo 'I am in: '.__CLASS__.'<br/>'; 
    } 

    public function getDataFromB(){ 
     echo 'I am in: '.__METHOD__.'<br/>'; 
    } 
} 

$objB = new B(); 
$objB->getDataFromB(); 

今の例を以下に我々は達成することができ、同じ:

class A { 
    public function __construct() { 
     echo 'I am in: '.__CLASS__.'<br/>'; 
    } 
    public function getData() { 
     echo 'I am in: '.__METHOD__.'<br/>'; 
    } 
} 

class B extends A { 
    public function getDataFromB(){ 
     echo 'I am in: '.__METHOD__.'<br/>'; 
    } 
} 

$objB = new B(); 
$objB->getDataFromB(); 

質問:それは、親のコンストラクタを呼び出すための子のコンストラクタを作成することをお勧めし

ですまたはその他がありますそうする利点?

+1

これは単なる余計な期間です。 – deceze

+1

親コンストラクタは、子クラスでオーバーライドしないと自動的に呼び出されます。したがって、追加の機能を実装する予定がない限り、無意味です。 –

答えて

2

クラスで__construct呼び出しの動作は次のとおりです。

  1. クラスはその__construct自身 - クラスが持っていない場合、それは
  2. と呼ばれる持っている場合 - 親__construct(それが存在する場合__construct自身を)が呼び出されます。だから、

あなたは子クラスに__constructを作成する場合は、明示的parent::__construct()でそれを指していない限り、親__construct呼び出されません。

子供に深刻なことがなければ__construct - あなたはそれを省略でき、親の__constructが呼び出されます。

反対側では、子供の追加の初期化やその他の操作を__constructに行うと、明示的に指定しない限りparent::__constructは呼び出されません。

+1

'__construct'だけでなく、これはすべてのメソッドの同じ動作です... – deceze

+0

@deceze確かに、ここでは' __construct'について説明します –

関連する問題