获取没有参数调用函数的函数名

时间:2012-02-09 14:28:32

标签: php

我有一个使用私有方法admin_model

的课程admin_form()

还有许多其他公共函数可以调用此方法。

有没有办法从INSIDE admin_form()获取调用admin_form()的函数的名称?

我可以在调用admin_form()时轻松添加参数:

$this -> admin_form(__FUNCTION__);

然后在admin_form($caller)内我有来电者。它将是$caller

但是我希望有一种方法可以在没有传递参数的情况下做到这一点。

任何想法?

干杯, 亚历

2 个答案:

答案 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"];

这将获得调用者的函数名称。