最初のサンプル コードが 2 番目のコードと同じ結果を生成することを期待していましたが、そうではありませんでした。したがって、正しいクラス名を取得するにmsg()
は、拡張クラスでカスタム メソッドを再定義する必要があります。
最初のクラスが拡張クラス名を生成しない理由と、メソッドが再定義されたときに生成される理由がまったく同じであることを知りたいです。
例 1
call_user_func(array(new MyClass_Mod, "msg"));
class MyClass {
function msg() {
echo '<p>get_class(): ' . get_class() . '</p>';
}
}
class MyClass_Mod extends MyClass {
}
出力
get_class(): MyClass
例 2
call_user_func(array(new MyClass_Mod, "msg"));
class MyClass {
function msg() {
echo '<p>get_class(): ' . get_class() . '</p>';
}
}
class MyClass_Mod extends MyClass {
function msg() {
echo '<p>get_class(): ' . get_class() . '</p>';
}
}
出力
get_class(): MyClass_Mod
メカニズムを知りたいので、使用を勧めないでくださいget_called_class()
。PHP 5.3 未満のバージョンでは使用できません。ご意見ありがとうございます。