2012-04-07 13 views
0

私はまだphpとすべてに新しいですが、私は(たとえ可能であれば)子クラスから親関数を呼び出すことを試みてきましたこれは異なる子の機能を実行する。私は子供のクラスはお互いを認識していないが、私は親クラスがあるかもしれないと思ったことを読んだ。非オブジェクト上のメンバ関数test1()を呼び出す

私は実際に数時間を探していますが、私はまだ助けてくれると思っているものを見つけていません。

次の意志出力:

::dad Class initiated:: 
::daughter Class initiated:: 
::son Class initiated:: 

Call to a member function test1() on a non-object in .... on line 15 

コード:

class dad { 

    function dad() 
    { 
     echo '::'.get_class($this).' Class initiated::<br>'; 
     $this -> daughter = new daughter(); 
     $this -> son = new son(); 
    } 

    public function afunction($string) { 

     return $this->son->test1($string); 

    } 

} 

class daughter extends dad { 

    function daughter() { 
    echo '::'.get_class($this).' Class initiated::<br>'; 

    } 

    public function test() { 

     parent::afunction("test"); 

    } 

} 

class son extends dad { 

    function son() { 
    echo '::'.get_class($this).' Class initiated::<br>'; 

    } 

    public function test1($string) { 

     echo $string; 

    } 

} 


$dad = new dad(); 
$dad->daughter->test(); 

どれ/すべてのヘルプは高く評価されています。

+0

どのバージョンのPHPを使用していますか? – Pete

+2

'function dad'はコンストラクタになるはずですか?次に、 '__construct'を使用します。 – hamczu

+0

[PHP:親クラスから子クラスの関数を呼び出す方法](http://stackoverflow.com/questions/1944827/php-how-to-call-function-of-a) -child-class-from-parent-class) –

答えて

0

これはあなたを助ける必要があります。一般的にはPHP: How to call function of a child class from parent class

を、彼らは道あなたが正しくないにしようとしている子クラスのメソッドを呼び出します。子クラスは、既存の(ほとんどの場合完全に機能する)クラスを拡張するように設計されており、既存の子に依存してはいけません。

0

dad()や類似したユーザマジック関数__construct()のようなコンストラクタを使用しないでください。私はあなたが父親のクラスに視野の娘を持っていないと確信しています。それを定義する必要があります。

+0

入力いただきありがとうございます。 –

0

かいつまん:daddaughtersonは、1つのオブジェクトのみ内部で動作parent関数形を呼び出して、別のオブジェクトです。あなたの例では、daughterは、dadオブジェクトにバインドされていることを知らないため、オブジェクトからプロパティとメソッドを継承します。それを動作させるには、親オブジェクトを子に渡して親を認識させ、この親オブジェクトの関数を呼び出す必要があります:

class dad { 
    function dad(){ 
     echo '::'.get_class($this).' Class initiated::<br>'; 
     $this -> daughter = new daughter($this); 
     $this -> son = new son($this); 
    } 

    public function afunction($string){ 
     return $this->son->test1($string); 
    } 
} 

class daughter extends dad { 
    function daughter($father) { 
     $this->father = $father; 
     echo '::'.get_class($this).' Class initiated::<br>'; 
    } 

    public function test() { 
     $this->father->afunction("test"); 
    } 
} 

class son extends dad { 
    function son($father) { 
     $this->father = $father; 
     echo '::'.get_class($this).' Class initiated::<br>'; 
    } 

    public function test1($string) { 
     echo $string; 
    } 
} 

$dad = new dad(); 
$dad->daughter->test(); 
+1

なぜクラスの後にコンストラクタの名前を付けるphp4の規約を提案しましたか? '__construct'を使うべきです。 –

+0

私は、OPコードをコピーして、理解しやすくするために必要な変更だけを提案したわけではありません。 –

+0

本当にありがとう –

関連する問題