php删除空数组-PHP 7.1 有哪些新功能?

2023-09-02 0 3,242 百度已收录

PHP社区已经发布了PHP 7.1,这个版本带来了很多好消息和很多新功能。 本文摘录了几个最重要的更新。 您还可以通过 PHP RFC 查看完整的更新列表。

可空类型

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

<pre data-cke-widget-data="%7B%22lang%22%3A%22php%22%2C%22code%22%3A%22function%20sum(int%20%24a%2C%20int%20%24b)%3A%20%3Fint%5Cn%7B%5Cn%20%20%20%20return%20%24a%20%2B%20%24b%3B%5Cn%7D%22%2C%22classes%22%3Anull%7D" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet" class="hljs php" style=" box-sizing: border-box; ; ; ; ; ; ; ; ; ; ; ; ">function sum(int $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_dump(sum(nullnull)); // NULLvar_dump(sum()); // throw ArgumentCountError exception

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

此外,在重载或实现可为 null 的类型时php删除空数组,不能使用它作为返回类型,但可以将其删除。 反之亦然!

interface Fooable {
    function foo(): ?Fooable;}interface StrictFooable extends Fooable {
    function foo(): Fooable// valid}interface Fooable {    function foo(): Fooable;}interface LooseFooable extends Fooable {
    function foo(): ?Fooable// invalid}

解构数组

当我们重构数组时,我们通常这样做:

list($a, $b, $c) = [123];
var_dump($a, $b, $c); // int(1) int(2) int(3)

但这是错误的,因为我们无法指定要提取的键并尝试使用索引键的功能

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); // int(1) int(2) int(3)

上面的例子可以写成:

["a" => $a, "b" => $b, "c" => $c] = ["a" => 1"b" => 2"c" => 3];
var_dump($a, $b, $c); // int(1) int(2) int(3)

php删除空数组-PHP 7.1 有哪些新功能?

很酷,对吧? 它也适用于多维字段:

[[$a, $b], [$c, $d]] = [[12], [34]];
var_dump($a, $b, $c, $d); // int(1) int(2) int(3) int(4)[["b" => $b], ["c" => $c]] = [["a" => 1, "b" => 2], ["c" => 3, "d" => 4]];var_dump($b, $c); // int(2) int(3)

可迭代的伪类

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

它可以用在参数或返回值类型中php删除空数组,它表示一个接受字段或实现 Traversable 接口的对象。 以下面的代码为例:

// PHP 5.6function dump(array $items){    var_dump($items);
}
dump([234]);
dump(new Collection());

array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(4)
}
Catchable fatal error: Argument 1 passed to dump() must be of the type array, object given...

但在这些情况下,该函数将不接受值并会抛出错误。 这项新更改允许您使用迭代来描述价值主张,而不是自动进行。

// PHP 7.1function dump(iterable $items){    var_dump($items);
}
dump([234]);
dump(new Collection());

array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(4)
}
object(Collection)#2 (0) {}

返回类型为空

这是我最喜欢的新功能之一。 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()]);
}// ...

英文原文:

编译:开源中国

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php删除空数组-PHP 7.1 有哪些新功能? https://www.wkzy.net/game/189466.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务