PHP7.1 的新特性

2019-05-13 16:49:57 阅读:7 编辑

1. 可为空(Nullable)类型

参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null。

<?PHP

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

var_dump (testReturn ());

function testReturn (): ?string
{return null;}

var_dump (testReturn ());

function test (?string $name)
{var_dump ($name);
}

test ('elePHPant');
test (null);
test ();

2.Void 函数

一个新的返回值类型 void 被引入。返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。对于 void 函数来说,NULL 不是一个合法的返回值。

<?PHP
function swap (&$left, &$right) : void
{if ($left === $right) {return;}

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump (swap ($a, $b), $a, $b);

试图去获取一个 void 方法的返回值会得到 NULL,并且不会产生任何警告。这么做的原因是不想影响更高层次的方法。

3.Symmetric array destructuring

短数组语法([])现在作为 list () 语法的一个备选项,可以用于将数组的值赋给一些变量(包括在 foreach 中)。

<?PHP
$data = [[1, 'Tom'],
    [2, 'Fred'],
];

// list () style
list ($id1, $name1) = $data [0];

// [] style
[$id1, $name1] = $data [0];

// list () style
foreach ($data as list ($id, $name)) {// logic here with $id and $name}

// [] style
foreach ($data as [$id, $name]) {// logic here with $id and $name}

4. 类常量可见性

现在起支持设置类常量的可见性。

<?PHP
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}

5. 多异常捕获处理

一个 catch 语句块现在可以通过管道字符 (|) 来实现多个异常的捕获。这对于需要同时处理来自不同类的不同异常时很有用。

<?PHP
try {// some code} catch (FirstException | SecondException $e) {// handle first and second exceptions}

6.list () 现在支持键名

现在 list () 和它的新的 [] 语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)

<?PHP
$data = [["id" => 1, "name" => 'Tom'],
    ["id" => 2, "name" => 'Fred'],
];

// list () style
list ("id" => $id1, "name" => $name1) = $data [0];

// [] style
["id" => $id1, "name" => $name1] = $data [0];

// list () style
foreach ($data as list ("id" => $id, "name" => $name)) {// logic here with $id and $name}

// [] style
foreach ($data as ["id" => $id, "name" => $name]) {// logic here with $id and $name}

7. 支持为负的字符串偏移量

<?PHP
var_dump ("abcdef"[-2]);
var_dump (strpos ("aabbcc", "b", -3));