it-swarm.com.ru

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

Я только что получил ошибку.

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

$obj_md = new MDB2();

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

Это так сбивает с толку .. Я надеюсь, вы могли бы помочь мне. Заранее спасибо.

61
José M. Gilgado

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

$obj_md =& new MDB2();

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

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

93
Paul Dixon

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

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

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

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

27
John Crockford

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

9
Nitin

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

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

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

8
Chris Burgess

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

7
Jeshurun

У меня такая же проблема. У меня уже был знак «&», и он по-прежнему выдавал такое же предупреждение…. Я использую PHP 5.3 с WAMP, и все, что я сделал, это удалил знак «&», и предупреждение исчезло.

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

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

1
Never Say Die

Обновите вашу грушу/MDB2 с консоли:

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

Проблема решена в версии 2.5.0b3

0
Serhii Koval

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

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

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

0
Shailesh Patel