PHP 7.1新特性的汇总介绍
一、可空类型可空类型主要用于参数类型声明和函数返回值声明。 主要的两种形式如下:function answer(): ?int {
return 42; // ok } function say(?string $msg) { 从例子很容易理解,所指的就是通过 ? 的形式表明函数参数或者返回值的类型要么为指定类型,要么为 null。 此方法也可用于接口函数的定义:但有一个需要注意的地方:如果函数本身定义了参数类型并且没有默认值,即使是可空的,也不能省略,否则会触发错误。如下: foo_nullable(new Bar); // 可行
foo_nullable(null); // 可行 foo_nullable(); // 不可行 但是如果以上函数的参数定义为 ? 二、list 的方括号简写我们知道在 PHP5.4 之前只能通过 1,"b" => 2,"c" => 3);
// 5.4 及之后 引申到另外一个问题上,如果我们要把数组的值赋值给不同的变量,可以通过 是否也可以通过 [] 的简写来实现呢? 以及下一个特性中会提到的 $a,"b" => $b,"c" => $c] = $array;
PHP7.1 实现了这个特性。但是要注意的是:出现在左值中的 [] 并不是数组的简写,是 但是并不仅仅如此,新的 $x,"y" => $y]) {
var_dump($x,$y);
}
不过因为实现的问题, // 不合法
[list($a,$b),list($c,$d)] = [[1,4]]; // 合法 三、允许在 list 中指定 key上文提到过,新的 1,"c" => 3];
["a" => $a,"c" => $c] = $array;
这也就相当于: 和以往的区别在于以往的 '1',2 => '2'];
会得到 而新的实现则可以通过以下方式来调整赋值: $a,2 => $b) = [1 => '1',2 => '2'];
不同于数组的是, $keyed) = $array;
更复杂的情况, 1,"y" => 2],["x" => 2,"y" => 1]
];
list(list("x" => $x1,"y" => $y1),list("x" => $x2,"y" => $y2)) = $points; $points = [ list("first" => list($x1,$y1),"second" => list($x2,$y2)) = $points; 以及循环中使用: 1,"y" => 1]
];
foreach ($points as list("x" => $x,"y" => $y)) { 四、void 返回类型PHP7.0 添加了指定函数返回类型的特性,但是返回类型却不能指定为 以下两种情况都可以通过验证: function returns_nothing(): void {
return; // valid } 定义返回类型为 function returns_null(): void {
return null; // Fatal error: A void function must not return a value } 此外 类函数中对于返回类型的声明也不能被子类覆盖,否则会触发错误: class Foobar extends Foo
{ public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void } } 五、类常量属性设定这个特性说起来比较简单,就是现在类中的常量支持使用 // 可以自定义常量的可见范围
private const PRIVATE_CONST = 0; protected const PROTECTED_CONST = 0; public const PUBLIC_CONST_TWO = 0; // 多个常量同时声明只能有一个属性 此外,接口( 为了应对变化,反射类的实现也相应的丰富了一下,增加了 $obj = new ReflectionClass( "testClass" );
$const = $obj->getReflectionConstant( "TEST_CONST" ); $consts = $obj->getReflectionConstants(); 六、多条件 catch在以往的 新的实现中可以在一个 对于异常的处理简化了一些。 总结以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用PHP7.1能有一定的帮助,如果有疑问大家可以留言交流。 附:源 RFC 地址
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |