いくつかのPHPコードを見直しながら、私は奇妙なことを発見しました。ここでの簡単な例を示す図である:PHP継承、子変数を使用する親関数
ファイルA.php:
<?php
class A{
public function methodA(){
echo $this->B;
}
}
?>
ファイルB.php:
<?php
class B extends A{
public $B = "It's working!";
}
?>
ファイルtest.phpを:
<?php
require_once("A.php");
require_once("B.php");
$b = new B();
$b->methodA();
?>
ランニングtest.phpは「働いています!」と表示しますが、質問はなぜ機能していますか? :)これは機能ですか、バグですか?クラスAのメソッドmethodAは、クラスBに属し、OOPで動作しないメソッドを呼び出すこともできます。
一つの方法は、Bを定義せずに、クラス「C」を作成すること、そして何が起こるかを見るであろう。あなたがしたことは、実験のために行われなかった場合、あなたは狂ったデザインと見なされますが、PHPはその状況で動作させるのに十分なほどスマートになるかもしれません。 –
OOPは、サブクラスメソッドの呼び出しが基本クラスから機能するかどうかは何も言いません。スーパークラスのメソッドは、(オーバーライドされていない限り)サブクラスに利用可能でなければならないと言われていますが、他の方法については静かです。実際、現存する最も純粋なOOP言語のいくつかは気にしません。 – cHao
5+ upvotes?どうして? –