オーバーライドされた別の静的関数 "inner"を呼び出すために、継承された静的関数 "call"が必要です。遅い静的バインディングでこれを行うことはできますが、私のホストにはまだphp5.3がないので、回避する必要があります。フェイク遅い静的バインディングphpの前に5.3
class ClassA{
static function call()
{
return self::inner();
}
static function inner(){
return "Class A";
}
}
class ClassB extends ClassA{
static function inner(){
return "Class B";
}
}
echo "<p>Class A = " . ClassA::call();
echo "<p>Class B = " . ClassB::call();
私はあることを出力したいと思います:
クラスA =クラスA
クラスB =クラスB
しかし、それが何であるか:
クラスA =クラスA
クラスB =クラスA
「コール()」が呼び出されたときに、どのオブジェクトが参照されたかを検出するためにcall()に何かを書くことができるはずです。したがってself :: inner()の代わりに、calledclass :: inner()の行に沿って何かがあります。元のメソッド呼び出しから呼び出すための適切なバージョンのinner()を検出します。
あなたのホストはFatCowですか?今は2012年6月ですが、PHP 5.3はまだありません。 FatCowでは-1です。 – Ben