0

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

4

2 回答 2

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"]);
于 2013-05-06T21:34:07.117 回答
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().

于 2013-05-06T21:34:21.237 回答