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

时间:2009-07-06 11:35:25

标签: php php-5.2

我刚收到错误。

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

$obj_md = new MDB2();

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

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

10 个答案:

答案 0 :(得分:94)

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

$obj_md =& new MDB2();

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

要了解为什么在PHP4中使用这个成语,请参阅this manual page(请注意,PHP4已经过时了,此链接指向相关页面的存档版本)

答案 1 :(得分:27)

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

  

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

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

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

答案 2 :(得分:9)

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

答案 3 :(得分:8)

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

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

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

答案 4 :(得分:7)

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

答案 5 :(得分:7)

我遇到了同样的问题。我已经有'&'而且它仍在发出同样的警告。 我正在使用带有WAMP的PHP 5.3,我所做的就是删除'&'标志和警告消失了。

$obj= new stdClass();  //Without '&' sign.

答案 6 :(得分:1)

只需移除new

中的$obj_md =& new MDB2();即可

答案 7 :(得分:0)

这是因为PHP 5.3,它来自WAMP 2.0i包,而不是Joomla。

你有两种选择来解决它,

使用WAMP网站上的WAMP 2h(上一版本)或download PHP 5.2.9-2插件。

答案 8 :(得分:0)

从控制台升级您的pear / MDB2:

# pear upgrade MDB2-beta
# pear upgrade MDB2_Driver_Mysql-beta

Problem solved at version 2.5.0b3

答案 9 :(得分:-6)

C:\wamp\www\..\libraries\pattemplate

1.ini_set('display_errors', 0);

$this->_modules[$moduleType][$sig]  =&new $moduleClass;   wrong

$this->_modules[$moduleType][$sig]  =new $moduleClass;   Right