Backward Incompatible Changes
Although most existing PHP 5 code should work without changes, please take
note of some backward incompatible changes:
-
Safe mode is no
longer supported. Any applications that rely on safe mode may need
adjustment, in terms of security.
-
Magic quotes has been removed. Applications relying
on this feature may need to be updated, to avoid security issues.
get_magic_quotes_gpc() and get_magic_quotes_runtime()
now always return
FALSE
. set_magic_quotes_runtime() raises an
E_CORE_ERROR
level error.
-
The register_globals and
register_long_arrays php.ini directives
have been removed.
-
Call-time pass by reference has been removed.
-
The break
and continue
statements no longer accept variable arguments (e.g., break 1 + foo() * $bar;).
Static arguments still work, such as break 2;. As a side effect of this change
break 0; and continue 0; are no longer allowed.
-
In the date and time extension, the timezone can no longer be
set using the TZ environment variable. Instead you have to specify a timezone using the
date.timezone php.ini option or date_default_timezone_set()
function. PHP will no longer attempt to guess the timezone, and will instead fall back to "UTC" and issue
a
E_WARNING
.
-
Non-numeric string offsets - e.g. $a['foo'] where $a is a string - now return
false on isset() and true on empty(), and produce a
E_WARNING
if you try to use them. Offsets of types double, bool and null produce a E_NOTICE
. Numeric strings
(e.g. $a['2']) still work as before. Note that offsets like '12.3'
and '5 foobar' are considered non-numeric and produce a E_WARNING
, but are converted
to 12 and 5 respectively, for backward compatibility reasons.
Note: Following code returns different result.
$str='abc';var_dump(isset($str['x'])); // false for PHP 5.4 or later, but true for 5.3 or less
-
Converting an array to a string will now generate an
E_NOTICE
level
error, but the result of the cast will still be the string "Array".
-
Turning
NULL
, FALSE
, or an empty string into an object by adding a property
will now emit an E_WARNING
level error, instead of E_STRICT
.
-
Parameter names that shadow super globals now cause a fatal error. This prohibits code like
function foo($_GET, $_POST) {}.
-
The Salsa10 and Salsa20 hash algorithms have been removed.
-
array_combine() now returns array() instead of
FALSE
when two empty arrays are provided as parameters.
-
If you use htmlentities() with asian character sets, it
works like htmlspecialchars() - this has always been the
case in previous versions of PHP, but now an
E_STRICT
level error is emitted.
The following keywords are now reserved, and may not be used
as names by functions, classes, etc.
The following functions have been removed from PHP: