Reputation: 6955
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
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
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