2012-02-09 54 views
2

调用函数get函数的名字,我有一个类admin_model与私营方法admin_form(),没有参数

有许多的调用这个方法等公共职能。

有没有办法从INSIDE admin_form()获得名为admin_form()的功能?

调用admin_form()当像我可以轻松地添加参数:

$this -> admin_form(__FUNCTION__); 

然后里面admin_form($caller)我有来电。这将是$caller

但我希望有一种方法可以做到这一点,而无需传递参数。

任何想法?

干杯,亚历克斯

+0

意味着你想递归函数? – diEcho 2012-02-09 14:30:56

+0

[在PHP中如何获取调用函数/方法的名称?](http://stackoverflow.com/questions/2110732/how-to-get-name-of-calling-function-method-in-php ) – 2012-02-09 14:33:54

+0

应该没有真正的理由让你这样做,它表明不好的编码习惯......但是如果你需要一个函数来完成不同的事情,你可能会考虑使用命名空间函数,这取决于它从何处调用 – 2012-02-09 14:34:46

回答

0

不管,

对于我的要求,这个功能很有用,而那是坏的编码“。

反正答案是:

$e = new Exception(); 
$trace = $e -> getTrace(); 
$caller = $trace[1]["function"]; 

这将让来电者的函数名。

1

你可以用debug_backtrace()做到这一点:

<?php 
class admin_model { 
    public function foo() { 
     $this->admin_form(); 
    } 

    public function bar() { 
     $this->admin_form(); 
    } 

    private function admin_form() { 
     // Get the current call stack 
     $stack = debug_backtrace(); 

     // Remove this call (admin_form()) from the stack 
     array_shift($stack); 

     // The calling method is now on the top of the stack 
     $lastCall = array_shift($stack); 
     $callingMethod = $lastCall['function']; 

     echo "admin_form() called by method: $callingMethod\n"; 
    } 
} 

$model = new admin_model(); 
$model->foo(); 
$model->bar(); 

输出:

admin_form() called by method: foo 
admin_form() called by method: bar 

但是,正如其他人指出,这是不好的做法,你应该重新考虑你的设计。