1

我希望第一个示例代码产生与第二个相同的结果,但事实并非如此。所以为了得到正确的类名,我不得不重新定义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(): 我的班级

示例 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

If the parameter of get_class is omitted when inside a class, the name of that class is returned.

You need to specify the parameter with $this.

于 2012-10-11T08:20:59.430 回答