月度归档:2019年12月

PHP7.4 发布 来说一下改进和新功能

空合并运算符 ??=

PHP新增一个 空合并运算符 ??= ,如下demo

<?php
$a??=1; // $a = isset($a)?$a:1;
echo $a; // 1

当前置变量 没有 赋值或为null 时,将后置变量赋值给前置变量,相当于 $a = $a??1;
$a = $a??1; 相当于 $a = isset($a)?$a:1; 注意 ?? 需要一个变量来接收,
而 ??= 是自动用前置变量来接收。
所以最终 $a??=1 相当于 $a = isset($a)?$a:1;

属性类型

意思呢就是 类的属性支持强类型了,这个功能我可是期待很久的。奈何 7.4 之前的版本并不支持。这样就能更严格的控制变量类型了。

对此说明一点,就目前来讲 强类型 并不会提高太多性能,只是让开发人员更清晰控制变量类型,都说 强类型 是编译性语言的特性,因为强类型有利于编译执行。当PHP有了强类型后,相信不久的将来 编译执行 特性也会来临,比如 p++。

箭头函数

这个箭头函数在JS等语言可能经常出现,其实就是 ()=>{} 常用于写匿名函数或操作数很精简的函数。

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

这是一个官方的 demo ,如果不知道 array_map 函数的意思可以查一下手册。

<?php

$fn = fn($a, $b, $c = 1) => $a + $b + $c;
echo $fn(1, 1); // 3

这个例子可能更简单,其实就是一个更简单一些
fn 是 function 的简写,函数内可以接收多个参数包括可选参数,箭头函数体内不能包括在 大括号 {} 内,仅允许一个表达式,并自动 return 返回,如果要更复杂的操作还是 常规的匿名函数来的方便。

数组展开 Unpacking inside arrays

这个特性也非常舒适,当你需要将两个数组合并时往往是用过 []+[] 或 array_merge 去合并数组,但当你新建立一个数组需要包含已有数组时往往只能 先创建再和合并数组,此时我们可以使用 …[] 来嵌套并展开已有数组。

<?php

$a = [1,2,3,4,5]; //已有数组

$b = [7,8,9,…$a];

var_dump($b); // [7,8,9,1,2,3,4,5];

数值分隔符

这个简单了解一下就好,就是数值中间穿插下划线 _ 会自动忽略,不会对数值产生影响。不知道这个特性有什么好处,毕竟一般分割是逗号 1,000 但是逗号在编程中又有特殊意义。

更多的参考官方文档吧

https://www.php.net/manual/en/migration74.new-features.php#migration74.new-features.core.unpack-inside-array