PHP:查询函数范围内定义的所有变量


PHP: query all variables defined inside function scope

这只是出于好奇,但我想知道是否有一种方法可以查询函数范围内定义的所有变量(只在该范围内,也可以从该函数内),并将它们放在关联数组中。类似于扩展的get_defined_vars函数。

原因是,如果能够在程序的任何时候保存执行的"状态",例如调试、记录、处理异常,甚至将函数的整个范围传递给另一个函数,那就太好了。如果我没有记错的话,我认为get_object_vars允许对对象执行此操作。

来自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>';

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

当然,您可以尝试var_dump。

忽略var_dump位,您已经发现get_defined_varsget_object_vars,它们非常接近。很抱歉。

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

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

我们现在有一个名为$hello的变量,值为"world",如果$x变量来自一些复杂的不确定性代码,那么不运行就无法判断。因此,当您在其中时,您只能检查当前变量,并且考虑到作用域是如何实现的,get_defined_vars非常接近,您会感到抱歉。