【问题标题】:PHP's =& operatorPHP 的 =& 运算符
【发布时间】:2011-08-21 06:31:51
【问题描述】:

这两个 PHP 语句是否在做同样的事情?:

$o =& $thing;

$o = &$thing;

【问题讨论】:

    标签: php assignment-operator


    【解决方案1】:

    是的,它们是完全相同的东西。他们只是获取对象的引用并在变量$o 中引用它。请注意,thing 应该是变量。

    【讨论】:

    • 是的,对不起,我的意思是$thing
    【解决方案2】:

    区别很重要:

    <?php
    $a = "exists";
    $b = $a;
    $c =& $a;
    echo "a=".$a.", b=".$b.", c=".$c."<br/>"; //a=exists b=exists c=exists
    
    $a = null;
    echo "a=".$a.", b=".$b.", c=".$c; //a= b=exists c= 
    ?>
    

    随着 $a 变为 NULL,变量 $c 消失,但变量 $b 保持其值。

    【讨论】:

    • 这不是问题的(当前编辑)所要求的。
    【解决方案3】:

    从句法上讲,它们不是一回事。运算符是原子的 =& ,这实际上很重要。例如,您不能在三元表达式中使用 =& 运算符。以下都不是有效的语法:

    $f = isset($field[0]) ? &$field[0] : &$field;
    $f =& isset($field[0]) ? $field[0] : $field;
    

    所以你会使用这个:

    isset($field[0]) ? $f =& $field[0] : $f =& $field;
    

    【讨论】:

    • 我希望找到一些文档来确认这一点,但是 php.net 不是很清楚。 What references do 提到了=&amp;,但奇怪的是,=&amp; 实际上并没有出现在assignment operators 中(它总是$x = &amp;$y;)。空白空间真的很重要还是相同?你能提供一些参考吗?
    • 如果 PHP 人想要,他们可以修改 PHP 解析器以允许上面的第二个错误示例,但看起来 =& 组合是由预处理器解释的,而不是在运行时解释的。如果您查看 PHP 编译器/解释器的源代码,您可以确认这一点。
    【解决方案4】:

    是的,他们有。 $o 在这两种情况下都会变成referencething(我假设thing 不是常数,但实际上作为变量有意义)。

    【讨论】:

    • 你不能像那样引用函数,也不能引用常量。
    • Karl,我认为这不是一个常数,因为对常数的引用是没有意义的。不过,您对功能是正确的。
    • 是的,抱歉我的意思是$thing
    • 此答案已过时,它是对以前版本的答案,有错误请删除此
    【解决方案5】:

    如果您的意思是 thing 前面有 $,那么是的,两者都是通过引用分配的。您可以在此处了解有关 PHP 参考的更多信息:http://www.php.net/manual/en/language.references.whatdo.php

    【讨论】:

    • 是的,对不起,我的意思是$thing
    • 此答案已过时,它是对以前版本的答案,有错误请删除此
    【解决方案6】:

    它们都给出了预期的 T_PAAMAYIM_NEKUDOTAYIM 错误。

    如果您的意思是$o = &amp;$thing;,那么会将thing 的引用分配给o。这是一个例子:

    $thing = "foo";
    
    $o = &$thing;
    
    echo $o; // echos foo
    
    $thing = "bar";
    
    echo $o; // echos bar
    

    【讨论】:

    • 是的,抱歉我的意思是$thing
    猜你喜欢
    • 2010-12-31
    • 2011-01-13
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2012-11-09
    • 2010-10-10
    • 2011-03-04
    相关资源
    最近更新 更多