使用backtrace_debug确定函数的调用方类和调用方方法。我做错了吗?
问题描述:
我有一个父类和一个子类。在一个父类中,我定义了一个函数f(),并且希望在其中打印子类的名称,该类扩展了调用此函数的父类和子类名称方法。我这样做。使用backtrace_debug确定函数的调用方类和调用方方法。我做错了吗?
abstract class ParentClass {
public function f() {
$backtrace = debug_backtrace();
echo "Class: " . $backtrace[1]['class']) . "\n";
echo "Function: " . $backtrace[1]['function'];
}
}
class ChildrenClass extends ParentClass {
public function some_func() {
$this->f();
}
}
$o = new ChildrenClass;
$o->some_func();
并正确输出我:
Class: ChildrenClass
Function: some_func
的问题是:是我的解决方案适合或有更好的方式来实现这一目标? 我试图使用__CLASS__
和__FUNCTION__
但它总是给我一个父类的类名和函数名。
答
如果你打印出$回溯VAR你可能会看到它进入一个更多的类
echo "Debug:<pre>".print_r($backtrace,true)."</pre><br />";
所以调用
$backtrace[1]['class']
工作,但你可能使这种动态。喜欢的东西:
// Loop, pseudo-code
$i = 0;
$backtrace[$i]['class']
$i++;