PHP7新特征

2020-08-19  本文已影响0人  乔四儿丶

指定参数 返回值类型

强制模式(默认)
严格模式(declare(strict_types=1); )

<?php
// 强制模式
function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(2, '3', 4.1));
?>
返回值为9
<?php
// 严格模式
declare(strict_types=1);

function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(2, '3', 4.1));
?>
报错

zval 结构的变化

变量的引用计数只记录在自身

引入 Throwable 接口

错误及异常都实现了 Throwable,无法直接实现 Throwable,但可以扩展 \Exception 和 \Error 类。可以用 Throwable 捕捉异常跟错误。\Exception 是所有PHP及用户异常的基类;\Error 是所有内部PHP错误的基类。

intdiv() 函数

intdiv(a, b) == a除以b,然后取整
<?php
echo intdiv(9,3),PHP_EOL; // 3
echo intdiv(10,3),PHP_EOL; // 3
echo intdiv(5,10),PHP_EOL; // 0
?>

常量数组

<?php
// 使用 define 函数来定义数组
define('sites', [
   'Google',
   'Runoob',
   'Taobao'
]);

print(sites[1]);
?>

合并运算符(??,?:)

NULL 合并运算符(??)会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数。
a ?: 0不等同于 !empty(a) ? a : 0。a未定义时a?:0会报错,!empty(a)不会

$a = 10;
var_dump($a ?? "a"); // 相当于: isset($a) ? $a : 'a' => 输出 10  
var_dump($a ?: "b"); // 相当于: $a ? $a : 'a' =>输出 10

use

同一个命名空间引入不同函数、对象时,可以用{}

use some\namespace\{ClassA, ClassB, ClassC as C};

太空船运算符

用于比较两个表达式 a 和b,如果 a 小于、等于或大于b时,它分别返回-1、0或1。
a <=>b

支持数组内解包 – 数组扩展Spread运算符(php7.4)

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);
相当于array_merge但是更快

箭头函数 2.0 (简短闭包php7.4)

function cube($n){
    return ($n * $n * $n);
  }
  $a = [1, 2, 3, 4, 5];
  $b = array_map('cube', $a);
  print_r($b);
  
$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);

预加载,是在模块初始化的时候,将库和框架加载到 OPCache 中

支持对const可见限定

上一篇 下一篇

猜你喜欢

热点阅读