不推荐使用引用分配new的返回值

Jos*_*ado 62 php php-5.2

我刚收到一个错误.

当我尝试分配这样的对象时:

$obj_md = new MDB2();
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"不推荐使用引用分配新值的返回值".实际上我一直在寻找一个解决方案,但我见过的唯一一个就是拒绝php.ini(error_reporting)的政治.我也尝试过,但它没有用.

这太令人困惑了......我希望你能帮助我.提前致谢.

Pau*_*xon 96

在PHP5中,这个成语已被弃用

$obj_md =& new MDB2();
Run Code Online (Sandbox Code Playgroud)

您确定在示例代码中没有错过&符号吗?这会生成您所声明的警告,但它不是必需的,可以删除.

要了解为什么在PHP4中使用这个习惯用法,请参阅本手册页(请注意PHP4已经过时了,此链接指向相关页面的存档版本)

  • 看来MDB2源代码本身也使用了这种不推荐的赋值方法; 无论何时创建MDB2对象,几个人(包括我自己)都会在PHP 5.3上获得上述"已弃用"的警告消息.看起来MDB2团队有一个错误:http://pear.php.net/bugs/bug.php?id = 16508 (7认同)
  • 不,我没有那个&符号.:( (3认同)
  • 这个答案很好,但可以通过解释是否替换=&new with = new可能会产生任何副作用来进一步改进.换句话说,为什么这个被弃用了?PHP 5的新版本是否不再返回副本(因此使=和不必要),或者相反,如何处理通过引用实际产生差异的情况? (2认同)

Joh*_*ord 28

我最近使用SimplePie(http://simplepie.org/)将一个站点从使用PHP 5.2.17的服务器移动到使用PHP 5.3.2 的站点.在这一举动之后,我开始收到一个错误消息列表,例如:

不推荐使用:在第738行的.../php/simplepie.inc中弃用了按引用分配new的返回值

在回顾了几个关于这个问题的讨论之后,我通过在simplepie.inc文件中替换=&new with = new的所有实例来解决问题.

我没有足够的经验知道这是否适用于收到这些错误消息的所有情况,但它在这种特殊情况下起作用,可能值得尝试.


小智 9

也许MDB2的构造函数有一些使用$ variable =&new ClassName()的代码;


Chr*_*ess 8

Nitin是正确的 - 问题实际上在MDB2代码中.

根据PHP的Replacement for PEAR:MDB2,您可以更新到MDB2的SVN版本,以获得与PHP5.3兼容的版本.

由于答案是在2010年3月给出的,并且http://pear.php.net/package/MDB2/在几个月后发布了一个版本,我预计当前版本的MDB2也将解决这个问题.


Jes*_*run 7

&在PHP中用于将对象传递给方法/通过引用将新对象分配给变量.它在PHP 5中已弃用,因为PHP 5默认情况下通过引用传递所有变量.

  • "默认情况下,PHP 5通过引用传递所有变量." 这不是真的**.PHP5通过引用传递所有**对象**,但其他vars默认按值.[富勒解释](http://stackoverflow.com/questions/879/php-variables-passed-by-value-or-by-reference) (25认同)

Vis*_*ang 7

我有同样的问题.我已经有了'&',但它仍然给出了相同的警告.我正在使用带有WAMP的PHP 5.3,我所做的只是删除'和'符号,警告消失了.

$obj= new stdClass();  //Without '&' sign.
Run Code Online (Sandbox Code Playgroud)