PHP 7 新特性回顾
本教程共 65 篇 · 第 45 篇 · 更新于 2026-07-24 · 约 10 分钟阅读
45. PHP 7 新特性回顾
本节目标:掌握 PHP 7 引入的核心新特性,能够使用标量类型声明、返回类型、
??运算符等现代语法编写更健壮的代码。
PHP 7 于 2015 年发布,是 PHP 发展史上的重要里程碑。它的执行速度比 PHP 5.6 提升了两倍以上,同时引入了大量让代码更严谨的语法特性。本节将回顾最常用的几项。
1. 标量类型声明
PHP 7 允许在函数参数中声明标量类型:int、float、string、bool。
在 PHP 5 中,只能声明 array、callable 和类名。PHP 7 补齐了这个短板。
<?php
function add(int $a, int $b): int
{
return $a + $b;
}
echo add(1, 2); // 3
echo add("1", "2"); // 3(字符串自动转为整数)
默认情况下,PHP 会尝试强制类型转换。如果传入 "3.14",它会转为 3。
若希望严格匹配类型,可在文件开头加上:
<?php
declare(strict_types=1);
function add(int $a, int $b): int
{
return $a + $b;
}
echo add(1.5, 2); // TypeError: 必须是整数
Tip
strict_types=1只对当前文件生效,不影响被调用的其他文件。
2. 返回类型声明
函数可以声明返回值的类型,让代码意图更清晰。
<?php
function greet(string $name): string
{
return "你好,{$name}";
}
function divide(float $a, float $b): ?float
{
if ($b == 0) {
return null;
}
return $a / $b;
}
?float 表示可空类型,允许返回 float 或 null。
Note返回类型不匹配时会抛出
TypeError。配合strict_types=1,检查会更严格。
3. Null 合并运算符 ??
判断变量是否存在且不为 null,是日常开发中最频繁的操作之一。PHP 7 引入了 ?? 运算符,让代码大幅简化。
以前这样写:
<?php
$name = isset($_GET['name']) ? $_GET['name'] : '访客';
现在可以写成:
<?php
$name = $_GET['name'] ?? '访客';
?? 会检查左侧变量是否存在且不为 null,满足则返回左侧值,否则返回右侧默认值。
连续使用也很方便:
<?php
$host = $config['db']['host'] ?? 'localhost';
如果 $config['db']['host'] 不存在,直接返回 'localhost',不会报错。
4. 太空船运算符 <=>
<=> 用于比较两个值,返回 -1、0 或 1。
- 左侧小于右侧,返回
-1 - 两侧相等,返回
0 - 左侧大于右侧,返回
1
<?php
echo 1 <=> 2; // -1
echo 2 <=> 2; // 0
echo 3 <=> 2; // 1
用在 usort 排序中非常顺手:
<?php
$numbers = [3, 1, 4, 1, 5];
usort($numbers, function ($a, $b) {
return $a <=> $b;
});
print_r($numbers); // [1, 1, 3, 4, 5]
Tip字符串同样支持
<=>,按字母顺序比较。
5. 匿名类
PHP 7 支持直接实例化匿名类,适合临时使用一次的场景。
<?php
$util = new class {
public function sayHello(): string
{
return '你好';
}
};
echo $util->sayHello();
匿名类也可以继承父类或实现接口:
<?php
interface Logger {
public function log(string $msg): void;
}
$logger = new class implements Logger {
public function log(string $msg): void
{
echo "[日志] {$msg}\n";
}
};
$logger->log('系统启动');
Note匿名类没有类名,调试时会在堆栈中显示为
class@anonymous。复杂逻辑仍建议定义具名类。
6. 其他值得了解的特性
| 特性 | 说明 |
|---|---|
| 常量数组 | define('FRUITS', ['苹果', '香蕉']); |
unserialize 过滤 | 增强安全性,防止对象注入 |
整除函数 intdiv() | intdiv(10, 3) 返回 3 |
| 异常层次改进 | Error 和 Exception 都实现 Throwable |
<?php
try {
$result = 1.0 / 0.0; // 浮点数除零返回 INF,不抛异常
} catch (Throwable $e) {
echo '捕获到错误:' . $e->getMessage();
}
小结
PHP 7 让代码从”松散”走向”严谨”。标量类型和返回类型提升了可读性,?? 和 <=> 减少了样板代码。建议新项目中优先使用这些语法。
来源:参考了 runoob「PHP 7 新特性」、PHP 官方文档,改写后所得。