我是OOP的新手,我正在尝试获取当前正在执行的类和方法的名称。例如:
<?php
class ParentExample
{
function __construct()
{
echo get_class($this) . '<br />';
echo __METHOD__;
exit;
}
}
class ChildExample extends ParentExample
{
public static function test()
{
echo 'hello';
}
}
call_user_func_array([new ChildExample, test]);
这是我想要的结果:
ChildExample
ChildExample::test
这是我得到的结果:
ChildExample
ParentExample::__construct
我看过debug_backtrace(),但我不明白如何破译结果,或者甚至是我需要的。有没有更简单的方法来实现我的目标?
编辑:根据答案,我认为我的问题不明确。我希望ParentExample构造函数告诉我被调用方法的名称。这可能吗?
答案 0 :(得分:1)
我希望ParentExample构造函数告诉我被调用方法的名称。这可能吗?
否 ,这是不可能的。构造函数在构造对象时执行,只有这样,这意味着它在之前执行,您可以对该对象进行任何方法调用。
echo __METHOD__;
位于__construct
方法范围内。由于__METHOD__
始终具有其所在方法的值,因此无法打印`
__construct
。您可以使用new
运算符创建对象。这不连接到静态test
方法。
您必须将echo __METHOD__
放入test
方法才能实现;)
您应该使用字符串来指定方法的名称:
call_user_func_array([new ChildExample, "test"]);
// Since you're not passing any arguments, this will do:
call_user_func_array([new ChildExample, "test"]);
答案 1 :(得分:0)
试试这个:
class ParentExample
{
function __construct()
{
echo get_class($this) . '<br />';
}
}
class ChildExample extends ParentExample
{
public static function test()
{
echo __METHOD__;
}
}
call_user_func([new ChildExample, 'test']);
请注意,我已在父构造函数中删除了exit
调用,并从子类中回显了__METHOD__
。如果您没有在ParentExample
实例化后立即结束脚本。
此外,如果您没有使用参数来调用该方法,则应该使用call_user_func()
而不是call_user_func_array()
。