我有一个功能
function my_dump($a,$name){
echo '<pre>'.$name.":\n";
var_export($a);
echo '</pre>';
}
Run Code Online (Sandbox Code Playgroud)
如何只使用一个参数来实现这一点,以便函数识别被调用变量本身的名称?
例如:
my_dump($cool_variable_name);
Run Code Online (Sandbox Code Playgroud)
将输出:
名称:"cool_variable_name"
内容:array(...
如果你需要调试代码,那么使用像xdebug这样的工具比自制的变量转储更加灵活和高效; 但是debug_backtrace()(虽然开销很大)可能会给你你需要的东西.提取调试转储函数调用的文件名和行号,并解析该行以提取调用函数时使用的变量名称
function my_dump($a) {
$backtrace = debug_backtrace()[0];
$fh = fopen($backtrace['file'], 'r');
$line = 0;
while (++$line <= $backtrace['line']) {
$code = fgets($fh);
}
fclose($fh);
preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name);
echo '<pre>'.trim($name[1]).":\n";
var_export($a);
echo '</pre>';
}
$foo = 'bar';
$baz = array(
'Hello',
'World'
);
my_dump($foo);
my_dump(
$baz
);
Run Code Online (Sandbox Code Playgroud)
如果您的PHP版本不支持阵列解除引用,请更改
$backtrace = debug_backtrace()[0];
Run Code Online (Sandbox Code Playgroud)
至
$backtrace = debug_backtrace();
$backtrace = $backtrace[0];
Run Code Online (Sandbox Code Playgroud)
如果你对my_dump()的调用跨越多行(比如我的$ baz示例),你需要一个稍微复杂的解析器来从你的代码中提取变量名.