PHP5.5.X 不向后兼容变更: 1.已放弃对 Windows XP 和 2003 的支持。构建 Windows 版本的 PHP 需要 Windows Vista 或更新的系统。 2.为使 pack() 和 unpack() 更兼容 Perl 做了一些变更,在使用这两个函数时,为保持较好的兼容性,可使用 version_compare 函
PHP5.5.X
不向后兼容变更:
1.已放弃对 Windows XP 和 2003 的支持。构建 Windows 版本的 PHP 需要 Windows Vista 或更新的系统。
2.为使 pack() 和unpack()
更兼容 Perl 做了一些变更,在使用这两个函数时,为保持较好的兼容性,可使用<span><span>version_compare</span></span>
函数对php版本进行比较。
3.移除php logo guids(包括php_logo_guid(),php_egg_logo_guid(),php_real_logo_guid(),zend_logo_guid()函数)。
新增功能:
1.新增generators,generators提供了一种更容易的方法来实现简单的对象迭代,但没有实现一个具有Iterator 接口的类所带来的性能开销和复杂性。
2.新增finally关键字
3.foreach支持list(),foreach 控制结构现在支持通过list() 构造将嵌套数组分离到单独的变量.
4.empty()支持任意表达式,而不仅仅是变量。
5.数组和字符串现在可以直接取消引用来访问各个元素和字符(例如:<span><span>echo [</span><span>1</span><span>, </span><span>2</span><span>, </span><span>3</span><span>][</span><span>0</span><span>];</span></span>
<span><span>echo </span><span>'PHP'</span><span>[</span><span>0</span><span>];</span></span>
)。
6.新的密码哈希 API。
7.改进GD(翻转支持使用新的 imageflip() 函数,高级裁剪支持使用imagecrop() &imagecropauto() 函数,WebP 的读写分别支持使用imagecreatefromwebp() &imagewebp())。
PHP5.4.X
不向后兼容变更:
1.不再支持 安全模式 。
2.移除
魔术引号 ,get_magic_quotes_gpc() 和get_magic_quotes_runtime()
现在总是返回FALSE
。 调用 set_magic_quotes_runtime() 将产生一个E_CORE_ERROR
级别的错误。
3.register_globals 和register_long_arrays php.ini 指令被移除。
4.调用时的引用传递 被移除。
5.break 和continue 语句不再接受可变参数( 比如: break 1 + foo() * $bar; )。像类似 break 2; 这样的固定参数仍可使用。受此变化影响,不再允许出现break 0; 和 continue 0; 。
6.在
日期与时间扩展 中,不再支持时区使用 TZ(TimeZone)环境变量设置。必须使用
date.timezone php.ini 配置选项或
date_default_timezone_set() 函数来指定时区。PHP 将不再尝试猜测时区,而是回退到“UTC”并发出一条E_WARNING
错误。
7.非数字的字符串偏移量,比如 $a['foo'] 此处 $a 是一个字符串,现在使用isset() 时返回
false,使用empty() 时返回 true,并产生一条E_WARNING
错误。
8.数组转换成字符串将产生一条 E_NOTICE
级别的错误,但返回的结果仍是字符串"Array" 。
9.NULL
、FALSE
、或 一个空字符串被添加成一个对象的属性时将发出一条E_WARNING
级别的错误,而不是
E_STRICT
。
10.现在参数名使用全局变量将会导致一个致命错误。禁止类似function foo($_GET, $_POST) {} 这样的代码。
11.Salsa10 和 Salsa20 哈希算法 被移除。
12.当使用两个空数组作为参数时,
array_combine() 现在返回array() 而不是
FALSE
。
13.htmlentities() 将像htmlspecialchars()
一样处理亚洲字符集,这是以前 PHP 版本的处理情况,但现在将会发出一条E_STRICT
错误。
14.强烈建议不要再使用 eregi() ,此特性在最新版本中被移除。
15.下列关键字现在被 保留 ,且不能用于函数名或类名(trait ,callable,insteadof)。
16.下列函数已从 PHP 中移除(define_syslog_variables(),import_request_variables(),session_is_registered()
、 session_register() ,session_unregister(),mysqli_bind_param()
、mysqli_bind_result() 、mysqli_client_encoding()
、mysqli_fetch() 、mysqli_param_count()
、mysqli_get_metadata() 、mysqli_send_long_data()
、 mysqli::client_encoding() , mysqli_stmt::stmt())。
新增功能:
1.新增支持 traits 。
2.新增短数组语法,比如$a = [1, 2, 3, 4]; 或 $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 。
3.新增支持对函数返回数组的成员访问解析,例如foo()[0] 。
4.现在闭包 支持 $this 。
5.现在不管是否设置short_open_tag php.ini 选项,= 将总是可用。
6.新增在实例化时访问类成员,例如:(new Foo)->bar() 。
7.现在支持Class::{expr}() 语法。
8.新增二进制直接量,例如:0b001001101
。
9.改进解析错误信息和不兼容参数的警告。
10.SESSION 扩展现在能追踪文件的 上传进度 。
11.内置用于开发的CLI 模式的 web server 。
PHP5.3.X
不向后兼容变更:
1.在 PHP 5.3.x 的所有绑定扩展中应用了新的内部参数解析API, 当给函数传递了不兼容的参数时将返回 NULL. 但有一些例外,比如函数
get_class() 在出现错误时将会返回
FALSE
.
2.clearstatcache() 默认不再清除缓存的 realpath.
3.realpath()
现在是完全与平台无关的. 结果是非法的相对路径比如 __FILE__ . "/../x" 将不会工作.
4.call_user_func()
系列函数即使被调用者是一个父类也使用 $this.
5.数组函数
natsort(),
natcasesort(),
usort(),
uasort(),
uksort(),
array_flip(), 和
array_unique() 将不再接受对象作为参数. 在将这些函数应用于对象时, 请首先将对象转换为数组.
6.按引用传递参数的函数在被按值传递调用时行为发生改变. 此前函数将接受按值传递的参数, 现在将抛出致命错误. 之前任何期待传递引用但是在调用时传递了常量或者字面值
的函数, 需要在调用前改为将该值赋给一个变量。
7.新的 mysqlnd 库需要使用 MySQL 4.1 新的 41 字节密码格式。继续使用旧的
16 字节密码将导致 mysql_connect() 和其它类似函数 抛出
"mysqlnd cannot connect to MySQL 4.1+ using old authentication." 错误.
8.新的 mysqlnd 库将不再读取
MySQL 配置文件(my.cnf/my.ini), 这与旧版本的 libmysql 库不同. 如果你的代码依赖于这些配置 文件, 你可以使用
mysqli_options() 显式地加载它. 注意, 这意味着如果 PDO 中的 MySQL 支持使用了 mysqlnd 进行编译,PDO 特有常量
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
和 PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
将是未定义的.
9.SplFileInfo
及其相关目录类会移除末尾的 /.
10.__toString
魔术方法不再接受参数.
11.魔术方法
__get,
__set,
__isset,
__unset, and
__call 应该总是公共的(public)且不能是静态的(static). 方法签名是必须的.
12.现在
__call 魔术方法在访问私有的(private)和被保护的(protected)方法时被调用.
13.函数内
include 或者
require 一个文件时,文件内 将不能使用
func_get_arg(),
func_get_args() 和
func_num_args() 函数。
14.新增了一个包裹在
MHASH 扩展外面的仿真层。但是并非所有的算法都涉及到了,值得注意的是 s2k 哈希算法。这意味着 s2k 哈希算法在 PHP 5.3.0 中不再可用。
新增功能:
1.添加了命名空间的支持.
2.添加了静态晚绑定支持.
3.添加了支持.
4.添加了原生的闭包(Lambda/匿名函数)支持.
5.新增了两个魔术方法, __callStatic 和 __invoke.
6.添加了
Nowdoc 语法支持, 类似于
Heredoc 语法, 但是包含单引号.
7.可使用双引号声明
Heredoc, 补充了
Nowdoc 语法.
8.可在类外部使用
const 关键词声明
常量.
9.三元运算操作符有了简写形式:
?:.
10.HTTP 流包裹器将从 200 到 399 全部的状态码都视为成功。
11.动态访问静态方法变为可能.
12.异常可以被内嵌.
13.新增了循环引用的垃圾回收器并且默认是开启的.
14.mail() 现在支持邮件发送日志. (注意: 仅支持通过该函数发送的邮件.)