Устаревшая функция: require_once () - PullRequest
4 голосов
/ 22 января 2011

Недавно я начал преобразовывать свой модуль Drupal 6 на PHP 5.2.x в Drupal 7 на PHP 5.3.x, и теперь я получаю следующее предупреждение

Устаревшая функция: присвоение возвращаемого значения новойссылка * устарела в 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 в Drupal 7 содержит строку: require_once DRUPAL_ROOT . '/includes/stream_wrappers.inc; и не выдает никаких предупреждений.Почему?

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

Ответы [ 3 ]

5 голосов
/ 22 января 2011

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

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

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

2 голосов
/ 22 января 2011

Хорошо бы подавить такую ​​ошибку?

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

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

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

0 голосов
/ 22 января 2011

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

...