PHP7+ 必知必会的新特性

322 阅读2分钟

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

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

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

三元运算符的变形

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

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

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

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

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

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

小技巧:链式调用

举例:

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

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

$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
// 使用 define 函数来定义数组
define('sites', [
   '掘金',
   'CSDN',
   '极客时间'
]);

print(sites[0]);
?>

//输出结果:掘金

use 语句

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

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

<?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 的类

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 进阶版

最后

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

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

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