Присвоение возвращаемого значения new по ссылке устарело

У меня только что появилась ошибка.

Когда я пытаюсь назначить такой объект:

$obj_md = new MDB2();

Ошибка, которую я получаю, - "Назначение возвращаемого значения new по ссылке устарело". На самом деле я искал решение, но единственное, что я видел, это просто отказаться от политики php.ini(error_reporting). Я тоже пробовал, но это не сработало.

Это так запутанно. Надеюсь, ты сможешь мне помочь. Спасибо заранее.

Ответ 1

В PHP5 эта идиома устарела

$obj_md =& new MDB2();

Вы уверены, что не пропустили амперсанд в своем примере кода? Это создаст предупреждение, которое вы заявите, но оно не является обязательным и может быть удалено.

Чтобы понять, почему эта идиома использовалась в PHP4, просмотрите эту страницу руководства (обратите внимание, что PHP4 давно устарел, и эта ссылка на архивную версию соответствующей страницы)

Ответ 2

Недавно я переместил сайт с помощью SimplePie (http://simplepie.org/) с сервера, использующего PHP 5.2.17, на тот, который использует PHP 5.3.2. Именно после этого хода я начал получать список сообщений об ошибках, таких как этот:

Устаревшее: присвоение возвращаемого значения new по ссылке устарел в... /php/simplepie.inc в строке 738

После рассмотрения нескольких обсуждений этой проблемы я очистил все, заменив все экземпляры = & новый с = new в файле simplepie.inc.

Мне недостаточно опыта, чтобы знать, будет ли это работать во всех случаях, когда эти сообщения об ошибках будут получены, но он работал в этом конкретном случае, и может быть стоит попробовать.

Ответ 3

Возможно, у конструктора MDB2 есть код, который использует переменную $variable = & new ClassName();

Ответ 4

Nitin верен - проблема действительно в коде MDB2.

В соответствии с Замена PEAR: MDB2 на PHP 5.3 вы можете обновить версию SVN MDB2 для версии, совместимой с PHP5.3.

Поскольку этот ответ был дан в марте 2010 года, а http://pear.php.net/package/MDB2/ показывает выпуск несколько месяцев спустя, я ожидаю, что текущая версия MDB2 также разрешит проблему.

Ответ 5

& используется в PHP для передачи объекта методу/назначения нового объекта переменной по ссылке. Это устарело в PHP 5, потому что PHP 5 передает все объекты по ссылке по умолчанию.

Ответ 6

У меня была та же проблема. У меня уже был "&". и все же это давало то же предупреждение. Я использую PHP 5.3 с WAMP, и все, что я сделал, это УДАЛИТЬ & & и предупреждение не было.

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

Ответ 7

просто удалите new в $obj_md =& new MDB2();

Ответ 8

Это произошло из-за PHP 5.3, который поставляется в пакете WAMP 2.0i, а не в Joomla.

У вас есть два варианта, чтобы исправить это,

либо использовать WAMP 2h (предыдущая версия), либо загрузить PHP 5.2.9-2 аддон с сайта WAMP.

Ответ 10

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