PHP5.4向下不兼容的改变

升级到PHP5.4,虽然大多数现有的PHP 5中的代码应该不会改变,请注意一些向后不兼容的变化:

  • 不再支持安全模式。任何依赖安全模式的应用程序都需要在安全方面进行调整。

  • 魔术引号被删除。依赖此功能的应用程序需要更新,以避免安全问题。get_magic_quotes_gpc()和get_magic_quotes_runtime()始终返回false。set_magic_quotes_runtime()会抛出E_CORE_ERROR错误。

  • 从php.ini中删除register_globals和register_long_arrays参数。

  • Call-time pass by reference has been removed.

  • break和continue不再支持可边的参数(例如break 1 + foo() * $bar;)。静态参数仍然被支持,如break 2;

  • date和time扩展中,不再支持TZ环境变量设置,你必须指定一个时区,在php.ini中设置date.timezone或者使用date_default_timezone_set()方法。如果timezone没有设置,PHP将不再尝试猜测当前时区,默认使用UTC,同时引发一个E_WARNING。

  • 非数字的字符串偏移量,例如$a['foo'] $a是一个字符串,isset()返回false,empty返回true,如果使用他们将会产生一个E_WARNING。bool和null类型的偏移量会产生一个E_NOTICE。数字字符串(例如$a['2'])仍将工作。请注意,’12.3′和’5 foobar’偏移量视为非数字,会产生一个E_WARNING,但经过转换后得到12和5仍将向后兼容。注意,下面的代码返回不同的结果,$str=’abc’; vardump(isset($str['x'])); //php5.4(包含5.4)以后的版本得到false,5.3(包含5.3)之前的版本得到true

  • 数组转换为字符串,将产生一个E_NOTICE错误,但返回的结果仍然是一个字符串”Array”。

  • NULL,FALSE或者一个空字符串添加一个对象属性,将会产生一个E_WARNING错误,而不是E_STRICT。

  • 参数名称使用全局的变量会得到致命的错误。禁止这样的函数foo($_GET,$_POST){}

  • Salsa10和Salsa20哈希算法已被删除。

  • array_combine()函数的2个参数为空数组的时候将会返回一个array()代替FALSE。原本如果array_combine()的2个参数为空数组或者单元数不同时会返回FALSE。

  • 若果你使用htmlentities()参数为亚洲字符串,他的工作类似于htmlspecialchars(),这是以前PHP版本的处理情况,但是现在将会引发一个E_STRICT错误。

以下关键字作为保留关键字,不得用于函数、类的名字

  • trait
  • callable
  • insteadof

下面的方法从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().