PHP 从 5.3.x 到 7.1.x 各版本新增特性简明列表
2016-09-27 22:23
423 查看
版本:5.3.x
命名空间 (Namespace) → 详细说明_NAMESPACE_ 魔术常量
namespace 关键字
延迟静态绑定(Late Static Binding)→ 详细说明
goto 语句 → 详细说明
无法跳出一个函数或类方法
无法跳入到另一个函数
无法跳入到任何循环或者 switch 结构中
PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域
通常的用法:用 goto 代替多层的 break
匿名函数(Anonymous functions) → 详细说明
也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。
经常用作回调函数(callback)参数的值。
也可以作为变量的值来使用(PHP 会自动把此种表达式转换成内置类 Closure 的对象实例)
新增两个魔术方法
__callStatic() 用静态方式调用一个不可访问方法时被自动调用
__invoke() 当尝试以调用函数的方式调用一个对象时被自动调用
新增 Nowdoc 语法支持, 类似于 Heredoc 语法, 但是包含单引号 → 详细说明
类外也可使用const来定义常量
和使用 define() 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if 语句之内用 const 来定义常量。
三元运算操作符有了简写形式: expr1 ?: expr3
在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3
HTTP 状态码在 200-399 范围内均被认为访问成功
支持动态调用静态方法
异常可以被内嵌
新增了循环引用的垃圾回收器,并且默认是开启的
mail() 现在支持邮件发送日志
注意: 仅支持通过该函数发送的邮件
版本:5.4.x
新增支持 Trait → 详细说明Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。
数组简短语法,比如 $a = [1, 2, 3]; 或 $a = ['one' => 1, 'two' => 2, 'three' => 3];
支持对函数返回数组的成员访问解析,例如 foo()[0]
闭包 支持 $this
现在不管是否设置 short_open_tag php.ini 选项,<?= 将总是可用
SESSION 扩展现在能追踪文件的上传进度 → 详细说明
Use mysqlnd by default
在实例化时访问类成员,例如: (new Foo)->bar()
支持 Class::{expr}() 语法
函数类型提示的增强
改进解析错误信息和不兼容参数的警告
让Json更懂中文(JSON_UNESCAPED_UNICODE)
新增二进制直接量,例如:0b001001101
内置用于开发的 CLI 模式的 web server → 详细说明
版本:5.5.x
新增生成器 Generators,主要通过 yield 关键字捕获异常支持 finally 关键字
foreach 现在支持 list()
$array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { echo "A: $a; B: $b\n"; }
empty() 支持传入一个任意表达式,而不仅是一个变量
array 和 string 可以通过索引直接获取数组元素或字符串中的字符
echo [1, 2, 3][0]; echo 'PHP'[0];
新的密码哈希接口,详见函数 password_hash()
Apache 2.4 的 SAPI 现在支持 Windows
改进 GD
翻转支持使用新的 imageflip() 函数。
高级裁剪支持使用 imagecrop() & imagecropauto() 函数。
WebP 的读写分别支持使用 imagecreatefromwebp() & imagewebp() 。
版本:5.6.x
使用表达式定义常量现在可以使用包括数值、字符串字面量以及其他常量在内的数值表达式来 定义常量、声明属性以及设置函数参数默认值。
使用 ... 运算符定义变长参数函数,可以不再依赖 func_get_args()
function f($req, $opt = null, ...$params) { // $params 是一个包含了剩余参数的数组 printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3); f(1, 2, 3, 4); f(1, 2, 3, 4, 5);
调用函数的时候,使用 ... 运算符, 将 数组 和 可遍历 对象展开为函数参数
function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators);
使用 ** 进行幂运算, 同时还支持简写的 **= 运算符,表示进行幂运算并赋值
use 运算符 被进行了扩展以支持在类中导入外部的函数和常量
对应的结构为 use function 和 use const
PHP 的 SAPI 模块中实现了一个 交互式调试器,叫 phpdbg → 详细说明
默认字符编码
对于一些字符编码相关的函数,例如 htmlentities(), html_entity_decode() 以及 htmlspecialchars() 使用 default_charset 作为默认字符集。请注意,对于 iconv(现已废弃) 和 mbstring 相关的函数, 如果分别设置了他们的编码, 那么这些对应设置的优先级高于 default_charset。
default_charset 的默认值是 UTF-8。
http://my.oschina.net/antsky/blog/php:/input 是可重用的了
支持大于 2GB 的文件上传
GMP 支持运算符重载, 并且造型成数值类型
使用 hash_equals() 比较字符串避免时序攻击
加入 hash_equals() 函数, 以恒定的时间消耗来进行字符串比较, 以避免时序攻击。 比如当比较 crypt() 密码散列值的时候,就可以使用此函数。 (假定你不能使用 password_hash() 和 password_verify(), 这两个函数也可以抵抗时序攻击)
加入 __debugInfo(), 当使用 var_dump() 输出对象的时候, 可以用来控制要输出的属性和值
加入 gost-crypto 散列算法
对 SSL/TLS 的支持进行了大幅度的提升
其中包括 默认启用端点验证 选项来支持证书指纹比对, 以避免 TLS 重新协商攻击。
还增加了很多 SSL 上下文选项, 以便在使用加密流的时候, 能够更好的控制协议和验证的相关设置
pgsql 异步支持
pgsql 扩展现在支持 异步方式连接数据库及执行查询, 也即可以使用非阻塞的方式和 PostgreSQL 数据库进行交互。 使用 PGSQL_CONNECT_ASYNC 常量可以 建立异步连接,pg_connect_poll(), pg_socket(), pg_consume_input() 和 pg_flush() 函数 可以用来处理异步连接和查询。
版本:7.0.x
标量类型声明,有两种模式: 强制 (默认) 和 严格模式返回值类型声明
null合并运算符(??)
// 如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数 $username = $_GET['user'] ?? 'nobody';`
太空船操作符(组合比较符 <=>)
echo 1 <=> 1; // $a 等于 $b 时返回 0 echo 1 <=> 2; // $a 小于 $b 时返回 -1 echo 2 <=> 1; // $a 大于 $b 时返回 1
通过 define() 定义常量数组
匿名类,通过new class 来实例化
Unicode codepoint 转译语法
Closure::call()
为unserialize()提供过滤(通过白名单的方式来防止潜在的代码注入。)
新增加的 IntlChar 类(旨在暴露出更多的 ICU 功能)
预期(是向后兼容并增强之前的 assert() 的方法)
从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了
use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC};
生成器可以返回表达式
此特性基于 PHP 5.5 版本中引入的生成器特性构建的。 它允许在生成器函数中通过使用 return 语法来返回一个表达式 (但是不允许返回引用值), 可以通过调用 Generator::getReturn() 方法来获取生成器的返回值, 但是这个方法只能在生成器完成产生工作以后调用一次。
Generator delegation
现在,只需在最外层生成其中使用 yield from, 就可以把一个生成器自动委派给其他的生成器, Traversable 对象或者 array。
整数除法函数 intdiv()
会话选项
session_start() 可以接受一个 array 作为参数, 用来覆盖 php.ini 文件中设置的 会话配置选项。
preg_replace_callback_array()
现在,可以使用一个关联数组来对每个正则表达式注册回调函数, 正则表达式本身作为关联数组的键, 而对应的回调函数就是关联数组的值。
CSPRNG Functions
新加入两个跨平台的函数: random_bytes() 和 random_int() 用来产生高安全级别的随机字符串和随机整数。
可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象
版本:7.1.x
可为空(Nullable)类型类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。可以通过在类型前面加上一个问号来使之成为可为空的。
Void 函数
返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,null 不是一个合法的返回值。
Symmetric array destructuring
// 短数组语法([])现在可以用于将数组的值赋给一些变量(包括在foreach中) $data = [ ['id' => 1, 'name' => 'Tom'], ['id' => 2, 'name' => 'Fred'], ]; while (['id' => $id, 'name' => $name] = $data) { // logic here with $id and $name }
类常量可见性
iterable 伪类
多异常捕获处理,一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。
list()现在支持键名
$data = [ ['id' => 1, 'name' => 'Tom'], ['id' => 2, 'name' => 'Fred'], ]; while (list('id' => $id, 'name' => $name) = $data) { // logic here with $id and $name }
支持为负的字符串偏移量
ext/openssl 支持 AEAD
通过 Closure::fromCallable() 将callables转为闭包
异步信号处理
一个新的名为 pcntl_async_signals() 的方法现在被引入, 用于启用无需 ticks (这会带来很多额外的开销)的异步信号处理。
HTTP/2 server push support in ext/curl
对服务器推送的支持现在已经被加入到 CURL 扩展中( 需要版本 7.46 或更高)。这个可以通过 curl_multi_setopt() 函数与新的常量 CURLMOPT_PUSHFUNCTION 来进行调节。常量 CURL_PUST_OK 和 CURL_PUSH_DENY 也已经被添加进来,以便服务器推送的回调函数来表明自己会同意或拒绝处理。
相关文章推荐
- php5.3以后各版本的特性(主要是整理一下面试用的)
- PHP 5.3向更高版本迁移之新特性
- PHP学习(四):PHP5.3版本的新特性
- PHP 5.3向更高版本迁移之新特性
- PHP 6预览 新增多项特性及改进
- PHP5.3新特性之语言特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP5.3新特性之命名空间
- PHP 6预览 - 新增多项特性及改进
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP5.3新特性之改进的性能
- php5.3新特性(一) -- 命名空间
- PHP 5.3中的新特性
- PHP5.3新特性之改进的性能
- PHP5.3中新增的魔术常量__DIR__
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP5.3中新增的魔术常量__DIR__
- phpmyadmin3.0 在php5.3版本下的使用