gpt4 book ai didi

PHP函数: find argument's variable name,和函数调用行号

转载 作者:行者123 更新时间:2023-12-03 02:47:59 25 4
gpt4 key购买 nike

我想做这样的事情来简化日志记录操作。知道我应该为 ?[1]??[2]??

添加什么内容吗?
function log_var($var) {
$line = ?[1]?;
$var_name = ?[2]?;

$line--;

$filepath = 'log-' . date('Y-m-d'). '.txt';
$message = "$line, $var_name = $var\n";
$fp = fopen($filepath, "a");
fwrite($fp, $message);
fclose($fp);
@chmod($filepath, 0666);
return TRUE;
}

这就是我在代码中使用该函数的方式(假定数字是实际代码中的行号):

23  $a = 'hello';
24 log_var($a);
25 $b = 'bye';
26 log_var($b);

这就是我想要写入日志文件的内容:

23, a = hello
25, b = bye

编辑我对 Paul Dixon 函数进行了一些转换,并将结果添加为答案。新形式的作用甚至比我最初希望的还要多。再次感谢大家!

最佳答案

这不是一件容易做到的事情,因为函数参数是一个在调用函数之前计算的表达式。因此,该函数只能看到该表达式的值,而不能看到表达式本身。

如果您真的想要这样做,您可以使用debug_backtrace要查找调用者的文件和行号,请​​从源文件中提取该行,然后从函数调用中解析出表达式。这是一个概念验证:

function dump($value)
{
$trace=debug_backtrace();
$expr="<unknown>";
if (isset($trace[0]['file']))
{
$lines=file($trace[0]['file']);
$line=$lines[$trace[0]['line']-1];
$expr=$line;
$expr=preg_replace('/\s*dump\(/i','', $expr);
$expr=preg_replace('/\);\s*/', '', $expr);

}

echo "$expr is $value\n";
}

//examples...
$a=10;
dump($a);

dump($a+10);

显然是疯了。但它有效:)您当然可以简单地将名称与变量一起传递!

关于PHP函数: find argument's variable name,和函数调用行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com