使用backtrace_debug确定函数的调用者类和调用者方法。我做错了吗?

时间:2010-10-07 01:53:57

标签: php oop

我有一个父类和一个子类。在父类中,我定义了一个函数f(),并希望在其中打印扩展父类的子类的名称以及调用此函数的子类名称。我这样做。

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__,但它总是给我一个父类的类名和函数名。

2 个答案:

答案 0 :(得分:0)

如果您打印出$ backtrace var,您可能会看到它进入更多类

echo "Debug:<pre>".print_r($backtrace,true)."</pre><br />";

所以打电话

$backtrace[1]['class'] 

会起作用,但你可能会让它变得动态。类似的东西:

// Loop, pseudo-code 
$i = 0;
$backtrace[$i]['class']
$i++;

答案 1 :(得分:0)

您还可以通过http://php.net/get_called_class

获取子课程的名称