我有一个奇怪的问题,这可能是不可能的,但值得一提的是,如果有任何PHP内部人员知道如何做到这一点。有没有办法从PHP中的函数调用中获取变量名?举个例子比较容易:
function fn($argument) {
echo SOME_MAGIC_FUNCTION();
}
$var1 = "foo";
$var2 = "bar";
fn($var1); // outputs "$var1", not "foo"
fn($var2); // outputs "$var2", not "bar"
在你说出来之前 - 是的,我知道这将是一个糟糕的主意,在生产代码中没有用处。但是,我正在将一些旧代码迁移到新代码中,这样我就可以非常轻松地自动生成替换代码。谢谢!
答案 0 :(得分:1)
debug_backtrace()返回有关当前调用堆栈的信息,包括对当前函数的调用的文件和行号。您可以读取当前脚本并解析包含调用的行,以找出参数的变量名称。
带有debug_backtrace的测试脚本:
<?php
function getFirstArgName() {
$calls=debug_backtrace();
$nearest_call=$calls[1];
$lines=explode("\n", file_get_contents($nearest_call["file"]));
$calling_code=$lines[$nearest_call["line"]-1];
$regex="/".$nearest_call["function"]."\\(([^\\)]+)\\)/";
preg_match_all($regex, $calling_code, $matches);
$args=preg_split("/\\s*,\\s*/", $matches[1][0]);
return $args[0];
}
function fn($argument) {
echo getFirstArgName();
}
$var1 = "foo";
$var2 = "bar";
fn($var1);
fn($var2);
?>
输出:
$var1$var2