在PHP中有太多我们需要学习和了解的东西,今天这篇文章就让我们一起去看看php7.4中的秘密吧!我相信,当你们看完这篇文章后一定会收获很多东西,话不多说,一起看看吧!
PHP 7.4中的PHP有何新功能?
在本文中,我们讨论了PHP 7.4最终版本中应在语言中添加的一些更改和功能:
- 支持数组内解包 – 数组扩展Spread运算符
- 箭头函数 2.0 (更加简短的闭包)
- NULL 合并运算符
- 弱引用
- 协变返回和逆变参数
- 预加载
- 新的自定义对象序列化机制
性能提升,数组表达式中引入 Spread 运算符…
自 PHP 5.6 起可用,参数解包是将数组和 Traversable 解包为参数列表的语法。要解压一个数组或 Traversable,必须以 …(3 点)为前缀,如下例所示:
function test(...$args) { var_dump($args); } test(1, 2, 3);
然而 PHP 7.4 RFC 建议将此功能扩展到数组中去定义:
$arr = [...$args];
Spread 运算符的第一个好处就是性能,RPC 文档指出:
Spread 运算符应该比
array_merge
拥有更好的性能。这不仅仅是 Spread 运算符是一个语法结构,而array_merge
是一个方法。还是在编译时,优化了高效率的常量数组
Spread 运算符的一个显着优点是它支持任何可遍历的对象,而该 array_merge
函数仅支持数组。以下是数组中参数带有 Spread 运算符的示例:
$p<div style="color:transparent">本&文来源gaodai^.ma#com搞#代!码网</div><strong>搞gaodaima代码</strong>arts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; var_dump($fruits);
如果在 PHP 7.3 或更早版本中运行此代码,PHP 会抛出一个 Parse 错误:
Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3
相反,PHP 7.4 将返回一个数组
array(5) { [0]=> string(6) "banana" [1]=> string(6) "orange" [2]=> string(5) "apple" [3]=> string(4) "pear" [4]=> string(10) "watermelon" }
RFC 声明我们可以多次扩展同一个数组。此外,我们可以在数组中的任何位置使用 Spread Operator 语法,因为可以在 spread 运算符之前或之后添加常规元素。因此,以下代码将按预期工作:
$arr1 = [1, 2, 3]; $arr2 = [4, 5, 6]; $arr3 = [...$arr1, ...$arr2]; $arr4 = [...$arr1, ...$arr3, 7, 8, 9];
也可以将函数返回的数组作为参数,放到新数组中:
function buildArray(){ return ['red', 'green', 'blue']; } $arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];
PHP 7.4 输出以下数组:
array(6) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(4) "blue" [3]=> string(4) "pink" [4]=> string(6) "violet" [5]=> string(6) "yellow" }
我们也可以使用生成器:
function generator() { for ($i = 3; $i <= 5; $i++) { yield $i; } } $arr1 = [0, 1, 2, ...generator()];
但不允许通过引用传递的方式。请考虑以下示例:
$arr1 = ['red', 'green', 'blue']; $arr2 = [...&$arr1];