Skip to content

PHP7+ 必知必会的新特性

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

PHP 7+ 版本极大地改进了性能,在一些场景下,性能可以达到PHP 5.6的3倍。(PHP也有未来 ps:笑脸)

今天整理一下我在项目中用到的PHP7的新特性

三元运算符的变形

PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式。 (注意:是isset()检测,后面会重点说明)

NULL 合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数。

以前我们这样写三元运算符:

sql
$site = isset($_GET['site']) ? $_GET['site'] : '掘金';

现在我们可以直接这样写:

sql
$site = $_GET['site'] ?? '掘金';

小技巧:链式调用

举例:

sql
$site = $_GET['site'] ?? $_POST['site'] ?? '掘金';

注意: 下面的情况?:输出结果是b,而不是false,因为在?:中判断值是否为真,false不为真,所以输出b。

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

常量数组:

在PHP7之前的版本中,我们只能通过const在函数外声明常量,如果在函数内使用const会提示我们:使用 const 关键字定义的常量必须在顶级范围内声明

PHP7+版本中我们可以使用define函数来定义常量数组,比如直接定义数组,常量数组性能更好。

举例:

php
<?php // 使用 define 函数来定义数组 define('sites', [    '掘金',    'CSDN',    '极客时间' ]);
print(sites[0]);
?> //输出结果:掘金

use 语句

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

PHP 7 之前版本需要使用多次 use

php
<?php use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use
function some\namespace\fcn_a;
use
function some\namespace\fcn_b;
use
function some\namespace\fcn_c;
use
const some\namespace\ConstA;
use
const some\namespace\ConstB;
use
const some\namespace\ConstC;
?>

PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类

php
use some\namespace\{ClassA, ClassB, ClassC as C
};
use
function some\namespace\{fcn_a, fcn_b, fcn_c
};
use
const some\namespace\{ConstA, ConstB, ConstC
};

这个新特性能让我们的代码更简洁。

欢迎互动

大家有什么好用的新特性欢迎在评论区讨论

硬核文章推荐

性能优化反思:减少DB查询,合理使用成员变量。

PHP转Go 2021年年中总结

如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了。

Git使用实战:多人协同开发,紧急修复线上bug的Git操作指南。

性能优化反思:不要在for循环中操作DB

性能优化反思:不要在for循环中操作DB 进阶版

最后

👍🏻:觉得有收获请点个赞鼓励一下!

🌟:收藏文章,方便回看哦!

💬:评论交流,互相进步!

AI 应用开发训练营 · 现在开始

别只收藏 AI 文章,今天就做出第一个能上线的项目

文章解决认知,项目才证明能力。把 Agent、RAG、MCP 变成可运行、可展示、可面试表达的成果,现在就从一次岗位准备度自测开始。

立即开始 AI 岗位准备度自测 查看训练营路线
真实学员成果先看成果,再决定是否开始 →
  1. 01选方向
  2. 02做项目
  3. 03出成果
  4. 04拿面试