关于php7新特性与新写法

136 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天

前段时间参加面试 被问到了php7的新特性和新写法 回来之后查阅了相关资料

新增操作符 合并运算符 ??

//类似的三元运算符
$expr1 = isset($expr2) ? $expr2: 0
//合并运算符写法
$expr1 = $expr2? $expr2 : 0

另外自 PHP 5.3 起,可以省略三元运算符中间那部分。 $expr1 ?: $expr3在 expr1 求值为 true 时返回 expr1,否则返回 expr3。


新增操作符 组合比较符<=> 语法格式如下

$c = $a <=> $b;

解析如下:

  • 如果$a > $b, $c 的值为1
  • 如果$a == $b, $c 的值为0
  • 如果$a < $b, $c 的值为-1

返回类型的声明。 类型声明有两种模式:

  • 弱类型校验模式(默认):当传入的参数不符合声明类型时,会首先尝试转换类型。
  • 严格类型校验模式:当传入的参数不符合声明类型时,直接报错。 可以使用字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool),来声明函数的参数类型与函数返回值。
    //1严格类型校验模式,0弱类型校验模式
    
    declare(strict_types=1); 
    function add(int $a, int $b): int {
        return $a+$b;
    }

如果参数类型不符合要求, 会输出一个报错

可空类型:在参数或返回值类型声明前面加上“?”,表示参数值或返回值要么是null,要么是声明的类型。

<?php
    function 函数名(?paraType ...$variable) : ?returnType
    {
        #code...
    }
>?

注: 参数类型和返回值类型可以不同时为可空类型,但当参数值为 null 时,则参数和返回值类型必须同时为可空类型。


在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义。


通过 new class 来实例化一个匿名类


可以使用一个 use 从同一个 namespace 中导入类、函数和常量

use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

Closure::call() unserialize() 过滤的特性