PHP 7.4.0 发布 快来看看新特性

sisophon 2019-12-02 PM 15℃ 0条

PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新。
php-7-4-new-features.png

类型属性

类属性现在支持类型声明。

<?php
    class User {
        public int $id;
        public string $name;
    }
?>

上面的示例将强制$user->id只能分配整数值,而$user->name只能分配字符串值。

箭头功能

箭头函数提供了用于定义具有隐式按值作用域绑定的函数的简写语法。

<?php
    $factor = 10;
    $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
    // $nums = array(10, 20, 30, 40);
?>

有限返回类型协变与参数类型逆变

现在,以下代码将起作用:

<?php
    class A {}
    class B extends A {}

    class Producer {
        public function method(): A {}
    }
    class ChildProducer extends Producer {
        public function method(): B {}
    }
?>

仅当使用自动加载时,才提供完全差异支持。在单个文件中,只能使用非循环类型引用,因为所有类在被引用之前都必须可用。

空合并分配运算符

<?php
    $array['key'] ??= computeDefault();
    // is roughly equivalent to
    if (!isset($array['key'])) {
        $array['key'] = computeDefault();
    }
?>

打包内部数组

<?php
    $parts = ['apple', 'pear'];
    $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
    // ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>

数值文字分隔符

数字文字可以在数字之间包含下划线。

<?php
    6.674_083e-11; // float
    299_792_458;   // decimal
    0xCAFE_F00D;   // hexadecimal
    0b0101_1111;   // binary
?>

带标签名数组的strip_tags()

strip_tags()现在也接受允许的标签数组:现在,您可以编写 strip_tags($str,['a','p'])来代替 strip_tags($str,'

')。

自定义对象序列化

添加了用于自定义对象序列化的新机制,该机制使用了两个新的魔术方法:__serialize 和__unserialize。

<?php
    // Returns array containing all the necessary state of the object.
    public function __serialize(): array;

    // Restores the object state from the given data array.
    public function __unserialize(array $data): void;
?>

更多PHP7.4特性,请查看:https://www.php.net/manual/zh/migration74.new-features.php#migration74.new-features.core.unpack-inside-array

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~