2010-10-07 32 views
1

我有一个父类和一个子类。在一个父类中,我定义了一个函数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__但它总是给我一个父类的类名和函数名。

回答

0

如果你打印出$回溯VAR你可能会看到它进入一个更多的类

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

所以调用

$backtrace[1]['class'] 

工作,但你可能使这种动态。喜欢的东西:

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