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>';
}
它不能正常运行 - 因为使用的表达式没有给出正确的结果。
在函数名称和带参数的括号之间使用\s*是没有意义的,因为中间什么也没有。
在表达式中使用;也没有意义。至少因为它只允许将此函数的结果作为独立变量赋值给其他变量。但有时需要将此函数用作参数。
而使用(.*)还将允许所有以参数形式给出的变量名后面的内容,即使其中有分号。
因此,需要排除结束括号符号)的结果。有很多方法可以做到这一点。
您可以使用下面函数代码中的形式或使用以下代码(或其他代码)。
'/'.__FUNCTION__.'\((\w+)\)/'
整个函数可以被简化为以下形式(例如,这是类函数的情况):
protected function Get_VariableNameAsText($Variable="")
{
$File = file(debug_backtrace()[0]['file']);
for($Line = 1; $Line < count($File); $Line++)
{
if($Line == debug_backtrace()[0]['line']-1)
{
preg_match('/'.__FUNCTION__.'\(([^\)]*)\)/', $File[$Line], $VariableName);
return trim($VariableName[1]);
}
}
}
我删除了使用var_export的部分,因为我不明白为什么要使用它,当我只想获取变量名作为字符串(文本)时。而给定字符串的打印最好在此函数之外。
如果您没有5.4或更高版本,则需要更改代码。
$File = file(debug_backtrace()[0]['file']);
if($Line == debug_backtrace()[0]['line']-1)
在。
$Trace = debug_backtrace();
$File = file($Trace[0]['file']);
if($Line == $Trace[0]['line']-1)