你怎么打破参考

时间:2014-12-13 19:20:11

标签: php

如何在不破坏变量本身的情况下破坏PHP中变量的引用?

我编写了一个PHP循环,它存储$GLOBALS['parent_variables']中对象的引用,然后在函数末尾销毁它。

在循环中调用该函数。我假设我使用:

unset($GLOBALS['parent_variables'])

这会破坏参考吗?只是为了确认...

我像这样设置引用:

$GLOBALS['parent_variables'] = &$question->variables;

2 个答案:

答案 0 :(得分:0)

后:

$GLOBALS['parent_variables'] = &$question->variables;

使用:

unset($GLOBALS['parent_variables'])

...会在保留$parent_variables的同时将参考文件 - 例如集合$question->variables中断为null。

使用:

$GLOBALS['parent_variables'] = null

...将两个变量都设置为null。

示例:

$foo = 'bar';

$GLOBALS['baz'] = &$foo;
unset($GLOBALS['baz']);
var_dump($GLOBALS['baz'], $foo);  # null, bar; undefined index notice for baz

$GLOBALS['baz'] = &$foo;
$GLOBALS['baz'] = null;
var_dump($GLOBALS['baz'], $foo);  # null, null; no notice (since baz is set)

答案 1 :(得分:0)

从数组中取消设置只会删除“引用”,并且不会更改您复制的原始对象。例如:

<?php

$foo = new StdClass();
$foo->bar = "hello";
$_FAKE_GLOBAL_ARRAY = array();
$_FAKE_GLOBAL_ARRAY['foo'] = $foo->bar;
echo "array references ".$_FAKE_GLOBAL_ARRAY['foo'];
echo "<br>object contains ".$foo->bar;
unset($_FAKE_GLOBAL_ARRAY['foo']);
echo "<br>now array references ".(isset($_FAKE_GLOBAL_ARRAY['foo']) ? $_FAKE_GLOBAL_ARRAY['foo'] : " nothing");
echo "<br>now object contains ".$foo->bar;
?>

输出

array references hello
object contains hello
now array references nothing
now object contains hello