php - 在 PHP 函数中获取调用范围?

标签 php scope

我可以从被调用函数中访问调用环境的范围吗?

例如,我想在日志函数中访问 __LINE__,但它必须是来自调用环境的 __LINE__。我还想通过某种方式调用 get_defined_vars() 来获取调用者变量。

在这两个示例中,它都不需要额外的参数。

这可能吗?

最佳答案

无法获取调用者的变量,但您可以获取他们的参数。这很容易用 debug_backtrace() 完成:

<?php

class DebugTest
{
    public static function testFunc($arg1, $arg2) {
        return self::getTrace();
    }

    private static function getTrace() {
        $trace = debug_backtrace();
        return sprintf(
            "This trace function was called by %s (%s:%d) with %d %s: %s\n",
            $trace[1]["function"],
            $trace[1]["file"],
            $trace[1]["line"],
            count($trace[1]["args"]),
            count($trace[1]["args"]) === 1 ? "argument" : "arguments",
            implode(", ", $trace[1]["args"])
        );
    }
}

echo DebugTest::testFunc("foo", "bar");

运行这个程序,我们得到这个输出:

This trace function was called by testFunc (/Users/mike/debug.php:23) with 2 arguments: foo, bar

debug_backtrace() 返回一个数组;元素 0 是调用函数本身的函数,因此我们在示例中使用元素 1。您可以使用循环一直沿轨迹返回。

关于php - 在 PHP 函数中获取调用范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697384/

相关文章:

php - td Rowspan 之后的 html,下一列数据转到下一行

scope - 局部变量和全局变量之间的差异

python - 非常奇妙的循环行为 : lists changes identity. 发生了什么?

php - CSS 文件未在 Codeigniter 中加载

php - 从 mysql 数据库中突出显示日期选择器中的事件

javascript - 如何在更新数据库记录时使用 $watch 查看更改

delphi - 当枚举值的类型在另一个单元中间接定义时,我该如何使用?

ruby-on-rails - 可以访问_by

php函数将数组分成3部分而不留下余数

PHP implode() 用 "array"替换所有数组值