2012-01-27 96 views
11

我有下面的代码。我想改变$ b以再次使用它的值。如果我这样做,它也会改变$ a。如何在先前将它分配为$ a的引用之后再次将值赋给$ b?PHP从变量中删除“引用”。

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

// later 
$b = null; 

回答

12

见解释直列

$a = 1;
$b = &$a;现在$ b和$ a只有2个不同的名字而变成相同的变量
unset($b); $ b的名字已经消失,从上下文中消失但$ a仍然可用
$b = 2;现在$ b就像新变量一样具有新值。开始新的生活。

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

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

首先:创建从$a$b参考创建(对于缺乏一个更好的词)这两个变量之间的连接,所以$a改变时$b变化正是它的方式意味着工作。

因此,假设你想打破参考,IST最简单的方法

unset($b); 
$b="new value"; 
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 
+0

很好的例子,这可能是多么棘手。 – dmikam 2015-08-04 14:37:07