Possible Duplicate:
Caller function in PHP 5?
I would like to know from where a global function or public method is being called. I guess I could do it by inspecting debug_backtrace but I'd rather use a lighterweight mechanism if one exists. Any suggestions?
For example something like so, if you imagine the get_callee() function and constant existing:
function doSomething() {
if(get_callee() == 'PHP_GLOBAL') { throw new IllegalAccessException(); }
...
}
Edit: Sorry, saw your note about debug_backtrace() now.
Kinda ugly but hey, if you need to do this something is wrong.
The magic is in the get_callee() function and debug_backtrace(). And yes, add some error checking if you must use this.
<?php
init();
function foo()
{
echo 'bar called from ' . get_callee() . '<br />';
bar();
}
function bar()
{
echo 'foo called from ' . get_callee() . '<br />';
}
function init()
{
echo 'init.. <br />';
foo();
}
function get_callee()
{
$backtrace = debug_backtrace();
return $backtrace[1]['function'];
}
Outputs:
init..
bar called from foo
foo called from bar
Why dont you simply use OO and declare your method/function private?
If you start sprinkling those get_callee() all over your code, you are creating a horrible kludge.
Xdebug provides some nice functions.
<?php
Class MyClass
{
function __construct(){
$this->callee();
}
function callee() {
echo sprintf("callee() called @ %s: %s from %s::%s",
xdebug_call_file(),
xdebug_call_line(),
xdebug_call_class(),
xdebug_call_function()
);
}
}
$rollDebug = new MyClass();
?>
will return trace
callee() called @ /var/www/xd.php: 16 from MyClass::__construct
To install Xdebug on ubuntu the best way is
sudo aptitude install php5-xdebug
You might need to install php5-dev first
sudo aptitude install php5-dev
来源:https://stackoverflow.com/questions/1513069/how-can-i-get-the-callee-in-php