Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I want to migrate code from PHP 5.2 to 5.4. This worked fine so far except that all the code I use makes extensive use of just using an object with a member without any initialisation, like:

$MyObject->MyMember = "Hello";

which results in the warning: "Creating default object from empty value"

I know that the solution would be to use:

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

but it would be A LOT OF WORK to change this in all my code, because I use this many times in different projects. I know, it's not good style, but unfortunately I'm not able to spend the next weeks adding this to all of my code.

I know I could set the php error_reporting to not reporting warnings, but I want to be able to still get other warnings and notices. This warning doesn't seem to be effected by enable or disable E_STRICT at all. So is there a way to just disable this warning?!

share|improve this question
I gotta say, I didn't know about this in 5.4 - looks like I'll be in the same boat as you soon enough. – Wesley Murch Nov 10 '12 at 17:10
Yeah - sometime you will not be able to write new software because you have to upgrade to old stuff... – Werner Nov 14 '12 at 15:55

3 Answers

up vote 4 down vote accepted

Technically you could do this by installing your own error handler for warnings. From inside the handler check the string error message; if it's the one you want to suppress then return true, otherwise return false to let the default error handler do its thing.

However I would still recommend doing the right thing and manually fixing your code wherever this misuse does appear because, if nothing else, it gets you into the correct habit. Unless this is paid work (in which case there usually are concerns that override purity of implementation), consider this as a lesson and do the right thing.

share|improve this answer
I was afraid someone would answer like this ;-) Yeah, you are fully right, lets see if I find the time. – Werner Nov 14 '12 at 15:54

I know I could set the php error_reporting to not reporting warnings, but I want to be able to still get other warnings and notices.

Don't disable the error reporting, leave it at an appropriate level, but disable the display_errors directive:

ini_set('display_errors', 0);

There's no reason to print notices to the screen in production.

Then as Jon said, use a custom error handler if you aren't already, example:

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

You can pass in the error reporting level to the second param of set_error_handler. This way you can take your time and do the right thing, which is fix the code to stop generating notices.

If you're moving a lot of sites over to 5.4, you can probably have your server admin turn off display_errors in php.ini until you have enough time to fix everything. Better yet, stage everything and fix it before upgrading, but that may not be an option.

share|improve this answer

you really could use an IDE for php and try to do this:

Search for $MyObject->MyMember = "Hello";

Look for the results and if it brings the right things, try to replace that with:

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

So maybe the IDE would do the long work for you...

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.