【发布时间】: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
最近我们将 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
澄清 Marc B 的答案:只需像这样删除&符号
$this->a = new test($this->f);
【讨论】:
您可以这样做:
$test = new test($this->f);
$this->a = $test;
现在 $test 是通过引用传递的,如果你改变了 $this->a 的属性,$test 的属性也会改变。反之亦然。
PHP 7 默认是“通过引用传递”。如果你不想通过引用传递对象,你应该这样做:
$a = clone $b;
【讨论】:
根据 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。只是不要通过引用分配。
【讨论】: