获取当前正在执行的方法

时间:2013-05-06 21:18:44

标签: php oop

我是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构造函数告诉我被调用方法的名称。这可能吗?

2 个答案:

答案 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()