AlexMorley-Finch
AlexMorley-Finch

Reputation: 6955

get function name that called function without arguments

I have a class admin_model with the private method admin_form()

There are a number of other public functions that call this method.

Is there a way to get the name of the function that called admin_form() from INSIDE admin_form()?

I could easily add an argument when calling admin_form() like:

$this -> admin_form(__FUNCTION__);

then inside admin_form($caller) I have the caller. It will be $caller

But i was hoping there was a way to do this WITHOUT passing arguments.

Any Ideas??

Cheers, Alex

Upvotes: 2

Views: 198

Answers (2)

FtDRbwLXw6
FtDRbwLXw6

Reputation: 28891

You can do this with 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();

Output:

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

But, as others have pointed out, this is bad practice and you should rethink your design.

Upvotes: 1

AlexMorley-Finch
AlexMorley-Finch

Reputation: 6955

No matter,

For my requirement this functionality is useful rather that 'bad coding'.

Anyway the answer is:

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

This will get the function name of the caller.

Upvotes: 0

Related Questions