我有一个使用私有方法admin_model
admin_form()
还有许多其他公共函数可以调用此方法。
有没有办法从INSIDE admin_form()
获取调用admin_form()
的函数的名称?
我可以在调用admin_form()
时轻松添加参数:
$this -> admin_form(__FUNCTION__);
然后在admin_form($caller)
内我有来电者。它将是$caller
但是我希望有一种方法可以在没有传递参数的情况下做到这一点。
任何想法?
干杯, 亚历
答案 0 :(得分: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
但是,正如其他人所指出的,这是不好的做法,你应该重新考虑你的设计。
答案 1 :(得分:0)
无论如何,
根据我的要求,此功能非常有用,而不是“编码错误”。
无论如何答案是:
$e = new Exception();
$trace = $e -> getTrace();
$caller = $trace[1]["function"];
这将获得调用者的函数名称。