2011-11-26 19 views
0

"myClass :: getItems()"を "workingCLass"から呼び出すと、getIdメソッドが呼び出されますか? 「こんにちは」または「さようなら」とエコーするもの?ありがとうございました。同じ名前のPHP複数のクラスとメソッド

class myClass extends otherClass { 
    function getId(){ 
     echo "hello"; 
    } 
} 


class otherClass{ 
    function getItems(){ 
     $this->getId(); 
    } 
    function getId(){ 
     echo "bye"; 
    } 
} 


class workingClass extends myClass { 
    function __construct(){ 
     $this->getItems(); 
    } 
} 

答えて

2

"hello"と1、あなたが明示的に呼び出すするかを指定したため。

しかし、問題は静的ではなく、静的なコンテキストで呼び出すことです。

編集:$thisを使用すると、にはgetItems()が存在しないため、何も呼び出されません。 workingClassotherClassに変更した場合は"bye"となります。

+0

あなたの権利は、$ this-> getItems()です。私が "myClass"に "getId"メソッドを持っていなかったら、 "bye"をエコーし​​ますか? – milan

+0

私は自分の答えを編集しました。 –

+0

私の例を編集して、私の質問に答えました。ありがとうございました – milan

2

あなたは静的(::)このメソッドを呼び出していると、このメソッド内であなたがworkingClass(それが呼び出されたオブジェクト)を参照し、workingClassは何getIdメソッドを持っていない$this特殊変数を使用しているので、これは、致命的なエラーになります。

OK、今度は、オブジェクト($this->)からメソッドを呼び出すときにPHPが常に最新の子クラスで定義されたものを実行するので、例を修正した後に 'hello'を出力すると言うことができます。

+0

あなたの権利、私は私の例でうんざり、私は誰かのコードを見ていて、たくさんのものを貼り付けてコピーしたくなかった。 – milan

+0

それはまだ致命的なエラーになります...もし 'workingClass'が' myClass'を拡張するなら、それは動作し、 'myClass'(hello)から' getId() 'を呼び出すでしょう。 –

+0

うん、私は最後の編集でそれを修正しました。ありがとう! – milan

関連する問題