Устаревшая функция: требуется один раз()


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

Устаревшая функция: Назначение возвращаемого значения 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?

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

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

Author: hakre, 2011-01-22

3 answers

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

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

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

 5
Author: ThiefMaster, 2011-01-22 20:34:55

Хорошо ли подавлять подобную ошибку?

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

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

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

 2
Author: mario, 2011-01-22 20:47:22

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

 0
Author: jocull, 2011-01-22 20:33:53