Migration54/incompatible-Phpdoc专题
不向后兼容的变更
尽管大部分现有的 PHP 5 代码不需要任何改变就可以正常运行,但请注意一些不向后兼容的变更:
- 不再支持安全模式。任何依赖安全模式的应用在安全方面都需要进行调整。
- 移除
魔术引号
。为避免出现安全问题,依赖此特性的应用可能需要升级。 <span
class="simpara"> <span
class="function">get_magic_quotes_gpc 和 <span
class="function">get_magic_quotes_runtime 现在总是返回
false。 想用 <span class="function">set_magic_quotes_runtime 开启 魔术引号 时将产生一个E_CORE_ERROR级别的错误。 -
register_globals
和
register_long_arrays
php.ini指令被移除。 - 删除了 mbstring.script_encoding 指令。使用 zend.script_encoding 代替。
- 调用时的引用传递 被移除。
- break 和 continue 语句不再接受可变参数( 比如: break 1 + foo() * $bar; )。像类似 break 2; 这样的固定参数仍可使用。受此变化影响,不再允许出现 break 0; 和 continue 0; 。
- 现在 <span class="function">htmlspecialchars、 <span class="function">htmlentities、 <span class="function">html_entity_decode 的默认字符集是 UTF-8,而之前是 ISO-8859-1。 除非你调用 <span class="function">htmlspecialchars/<span class="function">htmlentities/<span class="function">html_entity_decode 时 encoding 参数传入了 "" (空字符串),否则此次修改不会影响 htmlspecialchars/htmlentities 输出设置。 通常我们不推荐这么用,因为用这些函数输出字符集时不应该依赖于运行环境。 最安全的办法是每次调用 <span class="function">htmlspecialchars、 <span class="function">htmlentities、 <span class="function">html_entity_decode 时都明确指定字符集。
- 在
日期与时间扩展
中,不再支持时区使用 TZ(TimeZone)环境变量设置。必须使用
date.timezone
php.ini配置选项或 <span class="function">date_default_timezone_set 函数来指定时区。PHP 将不再尝试猜测时区,而是回退到“UTC”并发出一条E_WARNING错误。 - 非数字的字符串偏移量,比如 $a['foo'] 此处
$a 是一个字符串,现在使用 isset 时返回
false,使用 empty 时返回
true,并产生一条
E_WARNING错误。偏移量类型是布尔和 null 则产生一条E_NOTICE错误。 数字字符串(比如 $a['2'] )仍像以前一样运行。注意像类似 '12.3' 和 '5 foobar' 这样的偏移量将被视为非数字并产生一条E_WARNING错误,但因为向后兼容的原因它们会被分别转换成 12 和 5 。 注意:下列代码返回不同的结果。 <span class="simpara"> $str='abc';var_dump(isset($str['x'])); // 在 PHP 5.4 或更新版本返回 false,但在 PHP 5.3 或更低版本返回 true - 数组转换成字符串将产生一条
E_NOTICE级别的错误,但返回的结果仍是字符串 "Array" 。 -
null、false、或 一个空字符串被添加成一个对象的属性时将发出一条E_WARNING级别的错误,而不是E_STRICT。 - 现在参数名使用全局变量将会导致一个致命错误。禁止类似 function foo($_GET, $_POST) {} 这样的代码。
- Salsa10 和 Salsa20 哈希算法 被移除。
- 现在 Tiger 哈希算法 使用大端字节序(big-endian) 请按照 本示例 编写代码,以便同时兼容 PHP 5.3 和 5.4。
- 当使用两个空数组作为参数时, <span
class="function">array_combine 现在返回 array() 而不是
false。 - htmlentities
将像 htmlspecialchars
一样处理亚洲字符集,这是以前 PHP 版本的处理情况,但现在将会发出一条
E_STRICT错误。 - 现在 ob_start
的第三个参数由 bool
erase变为 <span class="type">intflags。 注意,在 PHP 5.4 里代码明确设置erase为false将不会按预期运行: 请按 本示例 编写代码,以便同时兼容 PHP 5.3 和 5.4。 - 强烈建议不要再使用 <span class="function">eregi ,此特性在最新版本中被移除。
下列关键字现在被 保留 ,且不能用于函数名或类名。
下列函数已从 PHP 中移除:
- <span class="function">define_syslog_variables
- <span class="function">import_request_variables
- <span class="function">session_is_registered 、 <span class="function">session_register 以及 <span class="function">session_unregister 。
- 别名 <span class="function">mysqli_bind_param 、 <span class="function">mysqli_bind_result 、 <span class="function">mysqli_client_encoding 、 <span class="function">mysqli_fetch 、 <span class="function">mysqli_param_count 、 <span class="function">mysqli_get_metadata 、 <span class="function">mysqli_send_long_data 、 mysqli::client_encoding() 以及 mysqli_stmt::stmt() 。