PHP从变量中删除“引用”。

时间:2012-01-27 09:13:33

标签: php variables reference

我有以下代码。我想更改$ b以再次使用值。如果我这样做,它也会改变$ a。如何在先前将值指定为$ a?

之后再将值分配给$ b
$a = 1;
$b = &$a;

// later
$b = null;

4 个答案:

答案 0 :(得分:13)

见内联说明

$a = 1;    // Initialize it
$b = &$a;  // Now $b and $a becomes same variable with just 2 different names  
unset($b); // $b name is gone, vanished from the context  But $a is still available  
$b = 2;    // Now $b is just like a new variable with a new value. Starting new life.

答案 1 :(得分:7)

$a = 1;
$b = &$a;

unset($b);
// later
$b = null;

答案 2 :(得分:5)

@xdazz的答案是正确的,但只是添加了PHP Manual中的以下优秀示例,它可以深入了解PHP在幕后所做的工作。

在此示例中,您可以看到函数foo()中的$bar是对函数作用域变量的静态引用。

取消设置$bar会删除引用,但不会释放内存:

<?php
function foo()
{
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar = 23;
    echo "after unset: $bar\n";
}

foo();
foo();
foo();
?>

以上示例将输出:

Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23

答案 3 :(得分:3)

首先:创建从$a$b的引用会在两个变量之间创建一个连接(缺少更好的词),因此$a会在{{1}时发生变化改变正是它的工作方式。

所以,假设你想打破引用,最简单的方法是

$b