如何在不破坏变量本身的情况下破坏PHP中变量的引用?
我编写了一个PHP循环,它存储$GLOBALS['parent_variables']
中对象的引用,然后在函数末尾销毁它。
在循环中调用该函数。我假设我使用:
unset($GLOBALS['parent_variables'])
这会破坏参考吗?只是为了确认...
我像这样设置引用:
$GLOBALS['parent_variables'] = &$question->variables;
答案 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