您的位置:首页 > 编程语言 > PHP开发

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 也已经被添加进来,以便服务器推送的回调函数来表明自己会同意或拒绝处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  curl PHP PostgreSQL