ここ数日悩んでいて結論が出たのですが、求めていた結論ではなかったので、諦める前に他の人の意見を聞いてみようと思います。信仰は最後に死ぬ...
スーパークラス (「スーパー」と呼ばれる) とサブクラス (「サブ」と呼ばれる) があるとします。
class Super {
protected static $title = 'super';
public static function get_class_name()
{
echo __CLASS__;
}
public static function get_title()
{
echo self::$title;
}
}
class Sub extends Super {
protected static $title = 'sub';
}
Sub は Super を拡張するため、Sub は Super のすべてのメソッドを継承することになると思われますが、Sub のメソッドへの参照のみを受け取るようです。
私がこれを言うのは、私が電話した場合:
Sub::get_class_name();
出力は「サブ」ではなく「スーパー」です。
そして、私が電話した場合:
Sub::get_title();
繰り返しますが、出力は「スーパー」であり、$title を Sub で宣言しています。
つまり、継承された静的関数を呼び出すと、関数のスコープは呼び出されたものではなくスーパークラスになります (バックトレースを出力しても、呼び出しがスーパークラスで行われたことがわかります!!!)、呼び出しが行われているサブクラスとしてスコープを取得するには、そのサブクラス内でそのメソッドを再宣言する必要があります。これはクラスを拡張する目的に反しますね。
私の質問は、静的クラスを拡張し、継承されたメソッドの 1 つを呼び出して、サブクラスのスコープを持つことはできますか? または少なくともクラス名を識別できるようにするには?そうでない場合、なぜ静的クラスを拡張したいのでしょうか?
ありがとう!