1

最初のサンプル コードが 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 未満のバージョンでは使用できません。ご意見ありがとうございます。

4

2 に答える 2

3

$this関数に引数を渡すだけget_classです。

get_class($this);
于 2012-10-11T08:16:57.887 に答える
1

クラス内で of パラメータをget_class省略すると、そのクラスの名前が返されます。

でパラメータを指定する必要があります$this

于 2012-10-11T08:20:59.430 に答える