php7.1新特性

php 7.1 新特性解析

返回值和传入参数可以指定为 null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

function testReturn(): ?string
{
return 'elePHPant';
}

var_dump(testReturn());

// 此处返回值如果没有问号,那么不能返回 null 值
function testReturn(): ?string
{
return null;
}

var_dump(testReturn());

// 参数类型提示为 ?string 代表可以传入一个 null 类型和 string 类型的值,但是不能不传值
function test(?string $name)
{
var_dump($name);
}
test('elePHPant');
test(null);
test();

void 函数

1
function swap(&$left, &$right) : void  // 在函数定义时,可以将 void 作为返回值类型,并且不能返回 null

短数组语法解析数组元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

// 可以使用 [] 短数组语法代替 list
$data = [
[2, 'b', 'B'],
[3, 'c', 'C'],
];

// list 可以解析数组的每个元素
foreach ($data as list($id, $lower, $upper)) {
echo $id.$lower.$upper.PHP_EOL;
}

// 7.1 中可以使用两个中括号解析数组,当做 list 来用
foreach ($data as [$id, $lower, $upper]) {
echo $id.$lower.$upper.PHP_EOL;
}

// list 支持自定义键名, 并且只能使用自定义键名进行赋值,无法自动按照顺序进行赋值
$data = [
["id" => 1, "lower" => 'a', 'upper' => 'A'],
];

// data 中 lower 的值赋值给 $id1
["lower" => $id1, "id" => $name1] = $data[0];

类常量可见性

1
2
3
4
5
6
7
8
<?php
class ConstDemo
{
const PUBLIC_CONST_A = 1; // 默认还是 public 的
public const PUBLIC_CONST_B = 2; // php7.1之前不允许设置可见性(封装特性)
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}

iterable 伪类

这个类可以用在参数或者返回值中。并且这个类型的参数或者返回值可以迭代(使用 foreach 遍历元素)

1
2
3
4
5
6
7
<?php
function iterator(iterable $iter)
{
foreach ($iter as $val) {
//
}
}

多异常捕获

1
2
3
4
5
6
<?php
try {
// some code
} catch (FirstException | SecondException $e) { // 处理多个异常不用为多个异常写多个 catch
// handle first and second exceptions
}

支持为负的字符串偏移量

就是所有的字符串函数偏移量都可以为负数,负数表示偏移量从字符串的最后一位往前数

ext/openssl 支持 AEAD

AEAD 是一个加密标准

AEAD算法浅析

HTTP/2 server push support in ext/curl

当用户的浏览器和服务器在建立链接后,服务器主动将一些资源推送给浏览器并缓存起来,这样当浏览器接下来请求这些资源时就直接从缓存中读取,不会在从服务器上拉了,提升了速率。

http server push

参考:

7.1新特性