PHP 5.4: отключить предупреждение «Создание объекта по умолчанию из пустого значения»

Я хочу перенести код с PHP 5.2 на 5.4. До сих пор это работало прекрасно, за исключением того, что весь используемый мной код широко использует просто использование объекта с членом без какой-либо инициализации, например:

$MyObject->MyMember = "Hello"; 

что приводит к предупреждению: «Создание объекта по умолчанию из пустого значения»

Я знаю, что решение было бы использовать:

 $MyObject = new stdClass(); $MyObject->MyMember = "Hello"; 

но было бы ПОЛНОСТЬЮ РАБОТЫ изменить это во всем моем коде, потому что я использую это много раз в разных проектах. Я знаю, это не хороший стиль, но, к сожалению, я не могу потратить следующие недели, добавив это ко всему моему коду.

Я знаю, что я могу установить php error_reporting, чтобы не сообщать предупреждения, но я хочу иметь возможность получать другие предупреждения и уведомления. Это предупреждение, похоже, не срабатывает при включении или отключении E_STRICT. Так есть способ просто отключить это предупреждение ?!

Solutions Collecting From Web of "PHP 5.4: отключить предупреждение «Создание объекта по умолчанию из пустого значения»"

Технически вы можете это сделать, установив собственный обработчик ошибок для предупреждений. Изнутри обработчика проверьте строковое сообщение об ошибке; если это тот, который вы хотите подавить, тогда return true , иначе return false чтобы обработчик ошибок по умолчанию выполнил свою задачу.

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

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

Не отключайте отчет об ошибках, оставьте его на соответствующем уровне, но отключите директиву display_errors :

 ini_set('display_errors', 0); 

Нет никаких оснований печатать уведомления на экране в процессе производства.

Затем, как сказал Джон, используйте собственный обработчик ошибок, если вы еще этого не сделали, например:

 function my_error_handler($error_level, $error_message) { // write error message to log file } set_error_handler('my_error_handler'); 

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

Если вы перемещаете множество сайтов до 5,4, вероятно, вы можете отключить display_errors от администратора сервера в php.ini, пока у вас не будет достаточно времени, чтобы исправить все. Еще лучше, скомпилируйте все и исправьте его перед обновлением, но это не вариант.

вы действительно можете использовать IDE для php и попытаться сделать это:

Найти $MyObject->MyMember = "Hello";

Ищите результаты, и если это приносит правильные вещи, попробуйте заменить это:

 $MyObject = new stdClass(); $MyObject->MyMember = "Hello"; 

Так что, возможно, IDE сделает вам долгую работу …

У меня была та же проблема, с которой я справляюсь, например, в производственной среде

  \error_reporting(\E_ERROR); 

Я должен сказать, что мое приложение не нуждается / генерирует ошибки, оно находится в очень контролируемой среде, поэтому это не сильно повредит, но если ваше приложение является подверженным ошибкам, вы должны иметь собственный обработчик ошибок и надлежащий regex и preg_match игнорируют предупреждение “Creating default object from empty value” и записывают / сообщают другие по вашему усмотрению.