PHP: 查询定义在函数作用域内的所有变量

3
这只是出于好奇,我想知道是否有一种方法可以查询在函数作用域内定义的所有变量(仅限于此范围内,并且来自该函数内),并将它们放入关联数组中。类似于扩展的get_defined_vars函数。
原因是希望能够在程序的任何时刻保存执行的“状态”,例如进行调试、日志记录、处理异常,甚至将整个函数的作用域传递给另一个函数。如果我没有弄错,我认为get_object_vars允许使用对象来完成这个功能。
2个回答

1

来自PHP.net评论

// The very top of your php script
$vars = get_defined_vars();

// Now do your stuff
$foo = 'foo';
$bar = 'bar';

// Get all the variables defined in current scope
$vars = array_diff(get_defined_vars(),$vars);

echo '<pre>';
print_r($vars);
echo '</pre>';

谢谢 :) 我认为这个方法可以解决问题,但在标记此为解决方案之前,我会等待是否有更好的答案。 - Jonathan H

0

PHP实际上没有作用域,它们是后来添加的,这就是为什么需要使用$this和global来访问全局变量。对象基本上是作为数组实现的,因为它们是后来出现的,这就是为什么两个对象的相等测试会逐个成员地进行。

当然,您可以尝试var_dump。

忽略var_dump部分,您已经找到了get_defined_varsget_object_vars,它们是最接近您所需的,很抱歉无法提供更多帮助。

告诉您函数中有什么内容的另一个困难在于它如何处理变量,记住PHP是一种动态语言,如果我们有:

$x = "hello";
$$x = "world"

我们现在有一个名为$hello的变量,其值为"world"。如果$x变量来自某些复杂的不确定代码,那么除非运行,否则无法判断。因此,只能在其中检查当前变量,并且考虑到作用域的实现方式,get_defined_vars是你所能得到的最接近的东西了,抱歉。


感谢您的快速回答。也许答案在其他地方;您知道有哪些支持PHP逐步执行/断点的IDE吗?如果有,他们必须有一种工具来本地分析PHP代码,对吧? - Jonathan H
1
实际上,PHP只是一个解释器,有一个名为“php”的程序可以像“python”一样运行它。Eclipse是一个很好的IDE,可以让你调试它,还支持自动完成,并且能够使用类型提示(但我不建议你使用类型提示)。在基于Debian的计算机上尝试sudo apt-get install php,但要注意,您可能需要安装像MySQLi之类的模块。虽然与Python调试相比有点更复杂,但肯定可以做到。 - Alec Teal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接