Although most existing PHP 4 code should work without changes, you should
pay attention to the following backward incompatible changes:
strrpos() and strripos() now use
the entire string as a needle.
Illegal use of string offsets causes E_ERROR instead
of E_WARNING.
array_merge() was changed to accept only arrays. If a
non-array variable is passed, a E_WARNING will be
thrown for every such parameter. Be careful because your code may start
emitting E_WARNING out of the blue.
PATH_TRANSLATED server variable is no longer set implicitly under
Apache2 SAPI in contrast to the situation in PHP 4, where it is set to
the same value as the SCRIPT_FILENAME server variable when it is not
populated by Apache. This change was made to comply with the CGI specification. Please refer to bug #23610 for further information.
The T_ML_CONSTANT constant is no longer defined by
the Tokenizer extension. If
error_reporting is set to E_ALL, PHP will generate a
notice. Although the T_ML_CONSTANT was never used
at all, it was defined in PHP 4. In both PHP 4 and PHP 5 // and /* */
are resolved as the T_COMMENT constant. However the
PHPDoc style comments /** */ ,which starting PHP 5 are parsed by PHP, are
recognized as T_DOC_COMMENT.
$_SERVER should be populated with argc and argv if variables_order includes "S". If
you have specifically configured your system to not create $_SERVER,
then of course it shouldn't be there. The change was to always make argc
and argv available in the CLI version regardless of the variables_order setting. As in,
the CLI version will now always populate the global $argc and $argv
variables.
An object with no properties is no longer considered "empty".
In some cases classes must be declared before used. It only happens only
if some of the new features of PHP 5 are used. Otherwise the behaviour is
the old.
get_class() starting PHP 5 returns the name of the
class as it was declared which may lead to problems in older scripts
that rely on the previous behaviour (the class name was lowercased).
A possible solution is to search for get_class() in
all your scripts and use strtolower().
ip2long() now returns FALSE when an invalid IP
address is passed as argument to the function, and no longer
-1.