2

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

AlexMorley-Finch
  • 6,785
  • 15
  • 68
  • 103
  • means you want recursive function?? – xkeshav Feb 09 '12 at 14:30
  • possible duplicate of [How to get name of calling function/method in PHP?](http://stackoverflow.com/questions/2110732/how-to-get-name-of-calling-function-method-in-php) – Mark Baker Feb 09 '12 at 14:33
  • There should be no real reason for you to do this, it indicates bad coding practises... but you might consider having namespaced functions if you need a function to do different things depending on where it's called from – Mark Baker Feb 09 '12 at 14:34

2 Answers2

1

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.

FtDRbwLXw6
  • 27,774
  • 13
  • 70
  • 107
0

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.

AlexMorley-Finch
  • 6,785
  • 15
  • 68
  • 103