Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg

PHP : Appendices : Migrating from PHP 3 to PHP 4 : empty('0')


Perhaps the most controversial change in behavior has happened to empty(). A String containing only the character '0' (zero) is now considered empty while it wasn't in PHP 3.

This new behavior makes sense in web applications, with all input fields returning strings even if numeric input is requested, and with PHP's capabilities of automatic type conversion. But on the other hand it might break your code in a rather subtle way, leading to misbehavior that is hard to track down if you do not know about what to look for.

Code Examples / Notes » migration4.empty


The changes to empty() also affect isset() in a similar way.
Under php3:
$foo=""; isset($foo) returned false..
but under php4 it returns true, because the variable is defined.
I discovered this when converting other people's code to php4. They used isset() unnecessarily - with the implicit expectation it just tested the value of the variable as being non-null. Although I don't agree with sloppy coding, it can give an unexpected shock when run under php4 and so any uses of isset() should be searched for before you attempt to migrate.

Change Language

Follow Navioo On Twitter
What has changed in PHP 4
Running PHP 3 and PHP 4 concurrently
Migrating Configuration Files
Parser behavior
Error reporting
Missing functions
PHP 3 extension
Variable substitution in strings
Handling of global variables
eXTReMe Tracker