get_called_class()は常に、実際に呼び出したクラスを返します。A2::を呼び出すので、A2 です。
私のサイトには、 LSB シングルトン抽象クラスのチュートリアルがあります。私はここにリンクしていません. しかし、それは私の説明にあります。
LSB の問題は、A のメソッドが A のメソッドを呼び出すことができる B のメソッドを呼び出すことができることです。次の例を参照してください。
header('Content-Type: text/plain'); // Pretty text output
// LSB Parent
class A {
// NOLSB: Will call Current Class method
static public function TriggerSelf() {
self::OverrideMe();
}
// LSB: Will call Inheriting Class method (or Current if none Inherits)
static public function TriggerStatic() {
static::OverrideMe();
}
// Method to Override
static public function OverrideMe() {
echo 'A here', PHP_EOL;
}
}
// LSB Child
class B extends A {
// Override by LSB
static public function OverrideMe() {
echo 'B here', PHP_EOL;
}
}
A::TriggerSelf(); // <- NO LSB
A::TriggerStatic(); // <- LSB (but not inheritance)
B::TriggerSelf(); // <- NO LSB
B::TriggerStatic(); // <- LSB (with inheritance, so it works)
B:: TriggerStatic ()によって A が B メソッドを呼び出し、B ::TriggerSelf()が A メソッドを呼び出す方法をご覧ください。それがLSBです。親クラスの静的メソッドは、子クラスの静的メソッドを呼び出すことができます。それはかなり静的な抽象です:)
例を調べてください、それは理にかなっています。