PHP 声明拒绝使用引用变量(5.3 中的 E_DEPRECATED,5.4 中的 E_STRICT)。最初,我认为在所有情况下都使用 &,但似乎不是。
所以我想知道,仍然允许什么样的代码使用引用,现在什么会引发 E_DEPRECATED/STRICT 错误?
到目前为止,根据我所学到的,结果如下:
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
SomeObject::foo()
返回一个对象的新实例。$somevar = & new SomeObject();
为什么要这么做?你期望会发生什么?我会说唯一的答案就是检查手册?查看http://www.php.net/manual/en/language.references.php,尤其是关于它们不是什么的部分(例如:指针)。
你可能会在那里读到:
仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一条警告说“调用时传递引用”已被弃用。从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。
所以你已经通过引用传递并通过引用重新运行(都有自己的手册页)