如何在PHP中获取被调用方?[副本]

unguejic  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(104)

此问题已在此处有答案

11年前关闭。

可能重复:

Caller function in PHP 5?
我想知道从哪里调用全局函数或公共方法。我想我可以通过检查debug_backtrace来实现,但如果存在的话,我宁愿使用轻量级机制。有什么建议吗?
例如,如果你想象get_callee()函数和常量存在:

function doSomething() {
     if(get_callee() == 'PHP_GLOBAL') { throw new IllegalAccessException(); }
     ...
}
kiz8lqtg

kiz8lqtg1#

编辑:抱歉,现在看到你关于debug_backtrace()的注解了。

有点丑,但嘿,如果你需要这样做,有些事情是错误的。
神奇之处在于get_callee()函数和debug_backtrace()。是的,如果你必须使用这个,添加一些错误检查。

<?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'];
}

输出:

初始化
从foo调用bar
foo从酒吧打来电话

ldioqlga

ldioqlga2#

Xdebug提供了一些不错的功能。

<?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();
?>

将返回跟踪

callee() called @ /var/www/xd.php: 16 from MyClass::__construct

在ubuntu上安装Xdebug的最佳方法是

sudo aptitude install php5-xdebug

您可能需要先安装php5-dev

sudo aptitude install php5-dev
pxy2qtax

pxy2qtax3#

为什么你不简单地使用OO并声明你的方法/函数是私有的?
如果您开始在代码中到处散布这些get_callee(),那么您正在创建一个可怕的组件。

相关问题