【问题标题】:What does the PHP operator =& mean? [duplicate]PHP 运算符 =& 是什么意思? [复制]
【发布时间】:2011-04-01 09:23:58
【问题描述】:

可能重复: What do the "=&" and "&=" operators in PHP mean?

我在下面的代码中找到了运算符“=&”,不知道是什么意思。它是什么意思,有什么作用?

我读到的代码

function ContentParseRoute($segments)
{
    $vars = array();

    //Get the active menu item
    $menu =& JSite::getMenu();
    $item =& $menu->getActive();

    // Count route segments
    $count = count($segments);
        ....

【问题讨论】:

标签: php operators


【解决方案1】:

这不是引用 (&) 的分配 (=)。

如果你说:

$a = 42;
$b =& $a;

实际上说将$a 通过引用分配给$b

通过引用分配的作用是将两个变量“绑定”在一起。现在,如果您稍后修改$a$b 将随之更改。

例如:

$a = 42;
$b =& $a;

//later
echo $a; // 42
echo $b; // 42

$a = 13;
echo $a; // 13
echo $b; // 13

编辑:

正如 Artefacto 在 cmets 中指出的那样,$a =& $b $a = (&$b) 相同。

这是因为& 操作符意味着对某物进行引用,而= 操作符执行按赋值,所以表达式$a = (&$b) 表示进行临时引用到$b,然后将该临时值分配给$a,这不是通过引用分配。

【讨论】:

  • -1 $b = (&$a); 是无效的语法。我知道这不是你的意思,但=& 实际上是一个单一的运算符,并转换为操作码ASSIGN_REF。这不是无关紧要的内部观察。考虑一个函数func,它通过引用$a = func() 返回。这个函数返回一个引用,但$a 不会是一个引用,因为操作符= 破坏了引用集并清除了标志。您实际上必须执行$a =& $func()& 表示“对此进行引用(例如array(&$a)),但引用不足以通过引用进行分配。
  • 真的吗?我不知道这一点,而且它以前从未对我造成破坏(至少显然如此)。猜猜你每天都会学到一些东西。 :) 我将为此更正编辑我的答案。
  • 应该是“这是一个引用分配”吗? “你实际上是在说通过引用 $a 来分配 $b”对我来说也是一种更直观的方式。
【解决方案2】:

这是一个使用示例:

$array = array('apple', 'orange', 'banana');

// Without &
foreach($array as $d)
{
    $d = 'fruit';
}

echo implode(', ', $array); // apple, orange, banana

// With &
foreach($array as &$d)
{
    $d = 'fruit';
}

echo implode(', ', $array); // fruit, fruit, fruit

不是一个解释,而是一个能够使用& 运算符而不在=& 赋值中使用它的示例。

【讨论】:

  • 在其他答案上查看我的 cmets。不要被& 的几个含义所迷惑。它们都以某种方式与引用相关,但它们的含义不同。
【解决方案3】:

它是引用赋值运算符

这意味着当您稍后在代码中修改运算符的 LHS 时,它将修改 RHS。您将 LHS 指向 RHS 占用的同一块内存。

【讨论】:

  • LHS = 左侧 RHS = 右侧
  • 这是正确的(至少您没有说“这些实际上是两个运算符”)。但是,最后一句话有点误导。在$a = $b; 中,$b 在大多数情况下也将指向与$a 相同的内存块。不同之处在于变量将在修改时被分离,而如果它在引用集中,它会。说“LHS 和 RHS 上的符号是同一个变量”或类似的意思可能更准确,并省略“内存”引用。
  • 接受的答案似乎暗示当您修改 RHS 时,LHS 也会被修改。对吗?
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2017-11-01
  • 2013-07-30
  • 1970-01-01
  • 2017-02-26
相关资源
最近更新 更多