2011-01-22 4 views
4

В последнее время я начал преобразование мой Drupal 6 модуль на PHP 5.2.x для Drupal 7 на PHP 5.3.x, и теперь я получаю следующее предупреждениеУстаревшие функции: require_once()

Устаревшие функции: Назначение на возвращаемое значение new по ссылке устарело в require_once() (строка 27 из C: \ Users \ ajinkya \ Desktop \ xampp \ php \ PEAR \ SOAP \ WSDL.php).

Линия 27 из WSDL.php является: require_once 'HTTP/Request.php';

Я не в состоянии выяснить, что является причиной этого предупреждения. Изменено ли поведение require_once() в PHP 5.3.x?

file.inc in Drupal 7 имеет строку: require_once DRUPAL_ROOT . '/includes/stream_wrappers.inc; и не вызывает никаких предупреждений. Зачем?

Если я установил error_reporting(E_ALL & ~E_DEPRECATED); в setup.php Drupal 7, предупреждение уходит. Хорошо ли подавлять такое предупреждение?

+0

По моему опыту, ошибка говорит вам, что что-то не так. Никогда не бывает хорошо подавлять ошибки. Сказав это, я не знаю, что здесь не так. – aqua

+0

В этом случае, я думаю, вы только подавляете предупреждения, а не ошибки. – jocull

ответ

5

В сообщении об ошибке указано, что код использует $something = &new SomeObject(); вместо $something = new SomeObject();.

&new был необходим в древних версиях PHP, чтобы гарантировать, что объекты всегда передавались по ссылке. Но в последних версиях нет оснований делать это вообще, поэтому он устарел.

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

+0

Это билет. Ошибка сообщается в вызове 'require_once', поскольку это ошибка времени синтаксического анализа (но она все равно должна быть лучше) ... – ircmaxell

+0

Было много экземпляров (около 100)« & new »в php-файлах в папке PEAR. Я заменил их «новыми». Раньше я получал три одинаковых предупреждающих сообщения, но теперь только один.Я скептически относился к замене всех экземпляров «& new» на «новый». Кроме того, я думал, что если я использую последнюю версию PEAR для PHP 5.3, такой проблемы не будет. –

0

Я ничего не вижу на сайте PHP, указывая, что require_once устарел. Возможно, что-то внутри HTTP/Request.php устарело? Это довольно странное предупреждение.

2

Это хорошо, чтобы подавить ошибку, как это?

Зависит. Игнорирование ошибок никогда не является хорошей идеей. Сохранение строгой отчетности - это хорошая идея для стадии разработки. Однако, как только PHP сообщит вам об этом отладочном сообщении, вы оцениваете его и основываете обоснованное решение по этому поводу.

Вы можете либо обойти упомянутую проблему, либо исправить ее, либо проигнорировать ее, если это не проблема.

Назначение объекта по ссылке не требуется и отныне устарело. Однако это не проблема, которая приведет к ошибкам, и она никогда не будет семантически запрещена. Удаление конструкции синтаксиса в будущих версиях приведет к нарушению совместимости, так что этого не произойдет. В этом случае осознанный выбор состоит в том, чтобы подтвердить или проигнорировать подсказку синтаксиса или удалить &, поскольку он не нужен, и его удаление в этом конкретном случае вряд ли нарушит поведение.

Смежные вопросы