Предупреждение «Deprecated: Assigning the return value of new by reference is deprecated in»

Данное предупреждение связано с использованием PHP версии 5.3 или выше.   В PHP 5.3 некоторые функции, параметры и возможности были отмечены как DEPRECATED (НЕИСПОЛЬЗУЕМЫЕ). В последующих версиях они будут удалены.

В частности, неиспользуемой возможностью стало использование конструкций вида: $instance = & new SimpleClass();

Можно либо

1) перейти на более старую версию PHP

2) отключить показ DEPRECATE ошибок

Для этого в  php.ini установить:

или в PHP файле задать:

Можно с помощью функции phpinfo() проверить каким на данный момент установлен уровень error_reporting. Он показывается там числовым значением.

Если указанный способ отключить показ DEPRECATED не работает — проверьте наличае других вызовов функции error_reporing.

Но нужно учесть, что с выходом PHP 6.0 данная конструкция будет вообще запрещена к использованию.

3) А лучше всего — немножко поредактировать код.

Например, большинство DEPRECATED в коде Joomla 1.0 и разных модулей было связано именно с использованием & перед new. Например:

Нужно просто удалить &.

Однако таких мест много. Но, если мы используем Eclipse, то просто заменить все вхождения «& new» на «new» во всех файлах. Для этого в меню выбираем Search>Search. Далее выбираем FileSearch, в поле containing text вводим «& new», нажимаем на кнопку Replace.

Будет осуществлён поиск по всем файлам проекта. И через некоторое время появится окошко Replace Text Matches.

C помощью кнопки Preview рассматриваем код, в котором будет произведена замена. И если всё нам нравится — то в нём в поле With вводим » new». И нажимаем OK

Если не сработало (у меня почему-то так произошло) обновляем весь проект (устанавливаем курсор на папку проекта и нажимаем F5) и повторям замену.

Возможны и исключения. Например, \modules\exmenu\loader\menu.menuloader.class.php on line 286. Если там удалить &, то меню работает некорректно.

Подробнее об изменениях в версии 5.3: http://php.su/php/?migration53