当前位置:免费学习网考试资料计算机类内容页

PHP 7.1中都有哪些重大更新

2021-05-24 00:15:01 计算机类 访问手机版

  PHP 7.1中都有哪些重大更新

  PHP 7.1.0 带来了大量的改进和新功能: 可空类型 返回空类型 可迭代的psuedo-type 支持常量可见的类 数组解构 square 框架和在 list中允许指定 keys 多异常类型捕获,以下是小编为大家搜索整理的PHP 7.1中都有哪些重大更新,希望能给大家带来帮助!更多精彩内容请及时关注我们免费学习网!

  可空类型

  PHP 7添加了参数类型声明和函数返回值类型声明,函数参数或者返回值的类型要么为指定类型要么为null。举例如下:

  function sumint $a, int $b: ?int

  return $a + $b;

  上述函数可以返回一个整数或一个空值,所以如果函数的逻辑中有错误,将不会再返回一个空类型来报错。你也可以验证一下。

  function sum?int $a, ?int $b: ?int

  if $a == null || $b == null return null;

  return $a + $b;

  要注意的是:调用没有参数的函数将抛出异常!

  var_dumpsumnull, null; // NULLvar_dumpsum; // throw ArgumentCountError exception

  这意味着,当他们没有默认值时,应该显示指定参数。

  还有就是,在重载或实现方法时不能把可空类型作为返回类型,但你可以删除它。反之亦然!

  interface Fooable

  function foo: ?Fooable;interface StrictFooable extends Fooable

  function foo: Fooable; // validinterface Fooable

  function foo: Fooable;interface LooseFooable extends Fooable

  function foo: ?Fooable; // invalid

  解构阵列

  当我们解构阵列是通常会这样做:

  list$a, $b, $c = [1, 2, 3];

  var_dump$a, $b, $c; // int1 int2 int3

  但这是错的,因为我们不能指定键来提取和尝试使用索引键的功能

  list$a, $b, $c = ["a" => 1, "b" => 2, "c" => 3];

  var_dump$a, $b, $c; // NULL NULL NULL

  RFC提供了更多的'控制阵列的解构。上面的代码可以改为:

  list"a" => $a, "b" => $b, "c" => $c = ["a" => 1, "b" => 2, "c" => 3];

  var_dump$a, $b, $c; // int1 int2 int3

  上面的例子可以写成:

  ["a" => $a, "b" => $b, "c" => $c] = ["a" => 1, "b" => 2, "c" => 3];

  var_dump$a, $b, $c; // int1 int2 int3

  很酷对不对?它还适用于多维数组:

  [[$a, $b], [$c, $d]] = [[1, 2], [3, 4]];

  var_dump$a, $b, $c, $d; // int1 int2 int3 int4[["b" => $b], ["c" => $c]] = [["a" => 1, "b" => 2], ["c" => 3, "d" => 4]];

  var_dump$b, $c; // int2 int3

  Iterable 伪类

  PHP 7.1 新引入了一个被称为 iterable 的伪类。

  它可以被用在参数或者返回值类型中,它代表接受数组或者实现了 Traversable 接口的对象。以下面的代码为例:

  // PHP 5.6function dumparray $items

  var_dump$items;

  dump[2, 3, 4];

  dumpnew Collection;

  array3

  [0]=>

  int2

  [1]=>

  int3

  [2]=>

  int4

  Catchable fatal error: Argument 1 passed to dump must be of the type array, object given...

  但在这种情况下,函数不会接受一个价值,将抛出一个错误。这一新的变化,让你使用迭代来描述而不是手动一个价值主张。

  // PHP 7.1function dumpiterable $items

  var_dump$items;

  dump[2, 3, 4];

  dumpnew Collection;

  array3

  [0]=>

  int2

  [1]=>

  int3

  [2]=>

  int4

  objectCollection#2 0

  void返回类型

  这是我最喜欢的新功能之一。PHP 7添加了指定函数返回类型的特性,一个新的返回值类型 void 被引入。试图去获取一个void 方法的返回值时,将被迫返回null!并且不会产生任何警告。

  function dump$object: void

  var_dump$object;

  返回类型声明为 void 类型的方法要么干脆省去 return 语句,要么添加一个空的函数return;。

  类常量的可见性

  虽然这是个很小的变化,但是加强了面向对象的封装,现在起支持设置类常量的可见性:

  class Post

  protected const PUBLISHED = 1; protected const DRAFT = 2; protected const TRASHED = 3; // ...

  捕获多个异常类型

  在以往的try... catch 语句中,每个catch 只能设定一个条件判断,新的版本可以在一个 catch 中设置多个条件,从而减少了需要复制的代码。 Java 等其他语言同样具备这种能力。以下面的代码为例:

  // ...try $user->payMonth$month;

  catch UserSuspendedException $ex

  DB::rollBack; return redirect

  ->back

  ->withInput

  ->withErrors[$ex->getMessage];

  catch PaidMonthException $e

  DB::rollBack; return redirect

  ->back

  ->withInput

  ->withErrors[$ex->getMessage];

  // ...