3

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

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

4

2 回答 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>';
于 2013-08-26T11:53:05.873 回答
0

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

您当然可以尝试 var_dump。

忽略 var_dump 位,你已经找到了,很抱歉,它们与你将得到的一样接近get_defined_varsget_object_vars

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

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

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

于 2013-08-26T11:50:26.700 回答