尽管大部分现有的 PHP 5 代码不需要任何改变就可以正常运行,但请注意一些不向后兼容的变更:
FALSE
。 想用 set_magic_quotes_runtime() 开启 魔术引号 时将产生一个 E_CORE_ERROR
级别的错误。
break 1 + foo() * $bar;
)。像类似 break 2;
这样的固定参数仍可使用。受此变化影响,不再允许出现 break 0;
和 continue 0;
。
UTF-8
,而之前是 ISO-8859-1
。
除非你调用 htmlspecialchars()/htmlentities()/html_entity_decode() 时 encoding 参数传入了 "" (空字符串),否则此次修改不会影响 htmlspecialchars/htmlentities 输出设置。
通常我们不推荐这么用,因为用这些函数输出字符集时不应该依赖于运行环境。
最安全的办法是每次调用 htmlspecialchars()、
htmlentities()、 html_entity_decode() 时都明确指定字符集。
E_WARNING
错误。
$a['foo']
此处 $a 是一个字符串,现在使用 isset() 时返回 false,使用 empty() 时返回 true,并产生一条 E_WARNING
错误。偏移量类型是布尔和 null 则产生一条 E_NOTICE
错误。 数字字符串(比如 $a['2']
)仍像以前一样运行。注意像类似 '12.3'
和 '5 foobar'
这样的偏移量将被视为非数字并产生一条 E_WARNING
错误,但因为向后兼容的原因它们会被分别转换成 12 和 5 。
注意:下列代码返回不同的结果。
$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) {}
这样的代码。
array()
而不是 FALSE
。
E_STRICT
错误。
erase
变为 int
flags
。
注意,在 PHP 5.4 里代码明确设置
erase
为 FALSE
将不会按预期运行:
请按 本示例 编写代码,以便同时兼容 PHP 5.3 和 5.4。
下列关键字现在被 保留 ,且不能用于函数名或类名。
下列函数已从 PHP 中移除: