【问题标题】:Is pass by reference supported in php 7?php 7 是否支持通过引用传递?
【发布时间】:2026-02-23 03:35:01
【问题描述】:

最近我们将 PHP 5.6 迁移到 PHP 7

现在下面的代码抛出$this->a =& new test($this->f);

Parse error: syntax error, unexpected 'new' (T_NEW) 

有什么想法吗?我可以使用哪些替代方法?

【问题讨论】:

    标签: syntax-error pass-by-reference php-7


    【解决方案1】:

    澄清 Marc B 的答案:只需像这样删除&符号

    $this->a = new test($this->f);
    

    【讨论】:

      【解决方案2】:

      您可以这样做:

      $test = new test($this->f);
      $this->a = $test;
      

      现在 $test 是通过引用传递的,如果你改变了 $this->a 的属性,$test 的属性也会改变。反之亦然。

      PHP 7 默认是“通过引用传递”。如果你不想通过引用传递对象,你应该这样做:

      $a = clone $b;
      

      【讨论】:

        【解决方案3】:

        根据 PHP7 不兼容的更改:http://php.net/manual/en/migration70.incompatible.php

        新对象不能通过引用分配

        新语句的结果不能再分配给一个 引用变量:<?php class C {} $c =& new C; ?>

        上述示例在 PHP 5 中的输出:

        不推荐使用:通过引用分配 new 的返回值是 在第 3 行的 /tmp/test.php 中已弃用

        上述示例在 PHP 7 中的输出:

        解析错误:语法错误,/tmp/test.php 中出现意外的“新”(T_NEW) 在第 3 行

        别无选择。您正在使用已弃用的行为,现在它不再是有效的 PHP。只是不要通过引用分配。

        【讨论】: