0

PHP 声明拒绝使用引用变量(5.3 中的 E_DEPRECATED,5.4 中的 E_STRICT)。最初,我认为在所有情况下都使用 &,但似乎不是。

所以我想知道,仍然允许什么样的代码使用引用,现在什么会引发 E_DEPRECATED/STRICT 错误?

4

2 回答 2

0

到目前为止,根据我所学到的,结果如下:

function foo(&$somevar) { /* ... */ }    // Allowed : pass-by-reference
function &foo($somevar) { /* ... */ }    // Allowed : returning-by-reference
$somevar = &othervar; *1                // Allowed

foo(&$somevar);                          // Refused : call-time pass-by-reference
$somevar = & new SomeObject();           // Refused
$somevar = & SomeObject::foo(); *2      // Refused
  1. $othervar不是一个对象
  2. SomeObject::foo()返回一个对象的新实例。
于 2012-11-07T08:14:41.027 回答
0
$somevar = & new SomeObject();

为什么要这么做?你期望会发生什么?我会说唯一的答案就是检查手册?查看http://www.php.net/manual/en/language.references.php,尤其是关于它们不是什么的部分(例如:指针)。

你可能会在那里读到:

仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一条警告说“调用时传递引用”已被弃用。从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。

所以你已经通过引用传递并通过引用重新运行(都有自己的手册页)

于 2012-11-07T08:24:19.277 回答