如何在没有debug_backtrace的情况下在__construct中获取被调用的函数名称

时间:2010-07-22 11:40:49

标签: php

如何在类构造函数中获取调用方法名称,get_called_class()为我提供了实例化的扩展类的名称,但是如何获取在该类中调用的方法的名称? 我需要这个生产状态,所以debug_backtrace()不是一个好的解决方案。

4 个答案:

答案 0 :(得分:1)

你为什么需要这个?如果您对项目和标准中的其他编码器任何考虑因素,请找到 not 的解决方案,要求构造函数知道它是如何被调用的。如果所有其他解决方案都失败,请定义一个静态工厂方法,并使构造函数为私有,以便更好地控制实例化。

答案 1 :(得分:0)

如果你不想使用debug_backtrace()函数,你也可以抛出并捕获异常,以获得回溯。

但那也很丑......无论如何:

try
{
    throw new Exception();
}
catch( Exception $e )
{
    print_r( $e->getTrace() );
}

我不知道你为什么需要来电者。也许你可以通过使用不同的逻辑来解决这个问题 它应该比获得回溯更好......

修改

不需要抛出异常。对不起该部分。
所以你可以简单地使用:

$e = new Exception();
print_r( $e->getTrace() );

但是再一次,你不应该使用它!

答案 2 :(得分:0)

看起来如果没有debug_backtrace()就无法获得它。你仍然可以为此创建我们的功能。 manual的示例:

function get_caller_method() 
{ 
    $traces = debug_backtrace(); 

    if (isset($traces[2])) 
    { 
        return $traces[2]['function']; 
    } 

    return null; 
} 

答案 3 :(得分:0)

除了缓慢/丑陋的debug_backtrace,或者将名称作为参数传递给构造函数之外,没有自动执行此操作的方法....但是您不应该真正在类中构建这些类型的依赖项。 / p>