首页 > 开发 > PHP > 正文

PHP 7.1新特性的汇总介绍

2024-05-04 22:50:08
字体:
来源:转载
供稿:网友

一、可空类型

可空类型主要用于参数类型声明和函数返回值声明。

主要的两种形式如下:

<?phpfunction answer(): ?int { return null; //ok}function answer(): ?int { return 42; // ok}function say(?string $msg) { if ($msg) { echo $msg; }}

从例子很容易理解,所指的就是通过 ? 的形式表明函数参数或者返回值的类型要么为指定类型,要么为 null。

此方法也可用于接口函数的定义:

<?phpinterface Fooable { function foo(?Fooable $f);}

但有一个需要注意的地方:如果函数本身定义了参数类型并且没有默认值,即使是可空的,也不能省略,否则会触发错误。如下:

<?phpfunction foo_nullable(?Bar $bar) {}foo_nullable(new Bar); // 可行foo_nullable(null); // 可行foo_nullable(); // 不可行

但是如果以上函数的参数定义为 ?Bar $bar = null 的形式,则第三种写法也是可行的。因为 = null 实际上相当于 ? 的超集,对于可空类型的参数,可以设定 null 为默认值。

二、list 的方括号简写

我们知道在 PHP5.4 之前只能通过 array() 来定义数组,5.4之后添加了 [] 的简化写法(省略了5个字符还是很实在的)。

<?php// 5.4 之前$array = array(1, 2, 3);$array = array("a" => 1, "b" => 2, "c" => 3);// 5.4 及之后$array = [1, 2, 3];$array = ["a" => 1, "b" => 2, "c" => 3];

引申到另外一个问题上,如果我们要把数组的值赋值给不同的变量,可以通过 list 来实现:

<?phplist($a, $b, $c) = $array;

是否也可以通过 [] 的简写来实现呢?

<?php[$a, $b, $c] = $array;

以及下一个特性中会提到的 list 指定 key

<?php["a" => $a, "b" => $b, "c" => $c] = $array;

PHP7.1 实现了这个特性。但是要注意的是:出现在左值中的 [] 并不是数组的简写,是 list() 的简写。

但是并不仅仅如此,新的 list() 的实现并不仅仅可以出现在左值中,也能在 foreach 循环中使用:

<?phpforeach ($points as ["x" => $x, "y" => $y]) { var_dump($x, $y);}

不过因为实现的问题,list() 和 [] 不能相互嵌套使用:

<?php// 不合法list([$a, $b], [$c, $d]) = [[1, 2], [3, 4]];// 不合法[list($a, $b), list($c, $d)] = [[1, 2], [3, 4]];// 合法[[$a, $b], [$c, $d]] = [[1, 2], [3, 4]];

三、允许在 list 中指定 key

上文提到过,新的 list() 的实现中可以指定key:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表