PHP 7 带来革命性性能提升 (Zend Engine 3) 与众多语言级新特性。本文深度解析 5 大核心特性,助你写出更健壮、现代化的代码。
?? — 简化三元判空// 旧写法 $a = isset($_GET['a']) ? $_GET['a'] : 1; // PHP 7 新写法 $a = $_GET['a'] ?? 1;
优势:
$a = $_GET['a'] ?? $_POST['a'] ?? 'default';expr1 ?? expr2 即 "expr1 若非 null 则取其值,否则取 expr2"对比:?: (Elvis 运算符) 要求变量已定义,?? 则兼容未定义场景。
function arraysSum(array ...$arrays): array {
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
语法:function name(...): returnType {},支持标量类型、array、callable、类/接口名。
配合可变参数 ... (PHP 5.6+) 与匿名函数类型声明,构建强类型函数式接口。
// 强制模式 (默认)
function sumOfInts(int ...$ints) {
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1)); // int(9) 自动转换
支持 int/float/string/bool 四大标量类型,打破 PHP 5 仅支持类/接口/array/callable 的限制。
declare(strict_types=1) — 杜绝隐式转换文件顶部声明 (必须第一行):
declare(strict_types=1);
function foo(int $a): int {
return $a;
}
foo(1.0); // TypeError: Return value must be integer, float returned
影响范围:
类似 JS 'use strict',强制类型安全,消除隐式转换 Bug 温床。
use 批量导入 — 命名空间管理更优雅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};
兼容性:基于 Composer PSR-4 自动加载完全兼容,类首次使用时按命名空间解析路径,批量导入不干扰加载机制。
new class extends Foo implements Bar { ... },适配器/模拟对象利器define() 定义常量数组:define('ARR', [1,2,3]);Closure::call():临时绑定 $this 调用闭包return 最终返回值:$gen->getReturn() 获取yield from 委托生成器:嵌套生成器扁平化$$foo['bar'] 歧义,支持任意表达式链Throwable 接口统一 Exception/Errordeclare(strict_types=1) 新项目默认严格模式isset($a) ? $a : $b 为 $a ?? $byield from 组合流水线PHP 7 不仅是性能跃迁,更是语言现代化的里程碑。拥抱类型系统,写出更安全、可维护、表达力更强的代码。