持续创作,加速成长!这是我参与「掘金日新计划 · 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() 过滤的特性