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