2016-06-01 6 views
0

私は2つのクラスを持っています。 1つは親で、もう1つは子です。どちらも同じ名前のメソッドを持っています。問題は、親メソッドが$ this-> methodNameを使用して呼び出されないということです。親::のinitを使用せずに、親メソッドを呼び出す方法

親クラス

class Parent 
{ 

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

    // this function never get executed and why? 
    public function init() 
    { 

     //do something 

    } 
} 

子クラス

class Child extends Parent 
{ 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->init(); 
    } 

    public function init() 
    { 
    // do something different 
    } 
} 

+1

なぜあなたの子クラスは親クラスを拡張していませんか? –

+0

私はそれを修正しました。私はそれをタイプしなかった。 – forethought

+1

なぜparent :: initを使用しませんか? – jiboulex

答えて

3

selfを使用すると、現在のクラスを参照できます。実行時に現在のオブジェクトを参照する$thisとは対照的に。

class ParentClass 
{ 

    public function __construct() 
    { 
     self::init(); 
    } 

    public function init() 
    { 
     echo 'parent<br/>'; 
    } 
} 
+0

ありがとうございます。できます。 – forethought

0
<?php 
    public function __construct(){ 
     parent::__construct(); 
     self::init(); 
    } 
?> 

親クラスでは、親initおよびchild initの実行を避けるためにselfも使用します。

+0

そのクラスに 'init'という静的関数はありませんか? –

+0

@AlonEitan関数は、自己を使用するために静的である必要はありません。 –

+0

@AndreFerraz参考にしてください。 –

0

事はparent::がありますが、その理由の1つは「問題」(これは問題ではありません)に対処することです。あなたは$thisは現在への参照であるので、それは明らかに子供のmyfunction()関数を呼び出します子供に$this->myfunction()を使用する場合は、例えばmyfunction()と呼ばれる機能とmyfunction()と呼ばれる機能を持つ親クラスと子クラスを持っている場合は明らかに

オブジェクト。

parentを使用しても問題はありません。理由はあります。

+0

ありがとう。私は、Parentクラスを独立させるためのソリューションを探していました。 – forethought

関連する問題