5.4.x
Backward Incompatible Changes
Backward Incompatible Changes
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 on trying to
enable Magic
quotes. - The register_globals and register_long_arrays php.ini
directives have been removed. - The
mbstring.script_encoding directive has been removed. Use zend.script_encoding instead. - 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 aE_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 anE_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. - The Tiger hash algorithm now uses
big-endian byte ordering. Please follow this
example to write code that is compatible with both PHP 5.3 and
5.4. - array_combine() now returns array()
instead ofFALSE
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 third parameter of
ob_start() has changed from booleanerase
to integerflags
. Note that code that explicitly set
erase
to
FALSE
will no longer behave as
expected in PHP 5.4: please follow this example to write code that is compatible with PHP
5.3 and 5.4.
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:
- define_syslog_variables()
- import_request_variables()
- session_is_registered(), session_register() and session_unregister().
- The aliases mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(),
mysqli::client_encoding() and mysqli_stmt::stmt().