【发布时间】:2011-05-21 09:39:19
【问题描述】:
$GLOBALS["items"] = array('one', 'two', 'three', 'four', 'five' ,'six', 'seven');
$alter = &$GLOBALS["items"]; // Comment this line
foreach($GLOBALS["items"] as $item) {
echo get_item_id();
}
function get_item_id(){
var_dump(key($GLOBALS["items"]));
}
检查此代码的输出,带有注释和未注释的第二行。 我的结果(PHP 5.3.0)。 用第二行
int(1) int(2) int(3) int(4) int(5) int(6) NULL
没有第二行:
int(1) int(1) int(1) int(1) int(1) int(1) int(1)
为什么会有这么奇怪的结果?
【问题讨论】:
-
老实说..我不知道..获取 $GLOBALS 的指针不应该改变变量。
-
不错的技巧。显然 $alter 接管了控制权。如果在分配数组后将 $alter 设置为 NULL,则数组甚至会变为无效,并导致以下循环出错。
-
这可能与
$GLOBALS本身就是一个引用数组有关。 PHP 中的引用总是很时髦。 -
@BoltClock,您可以将 $GLOBALS 替换为另一个数组变量,这个 hack 也可以)))
-
我不明白为什么这应该是一个“黑客”。有什么好处?在我看来,这要么是一个错误、奇怪的行为,要么是可以解释的。
标签: php arrays global-variables