PHP 7 显著提高了整体性能。实际上主要的特性有 null 合并运算符或返回类型声明。如果你不知道它们,那么你应该去查看 PHP 文档。

这里有一些很少人知道的、可能有用的特性。

相同的命名空间,相同的 use

在 PHP 7 之前,开发者经常这么做:

use Universe\Saiyan;
use Universe\SuperSaiyan;

  

从 PHP 7 开始:

use Universe\{Saiyan, SuperSaiyan};

  

函数和常量也是一样的。如果它们属于同一命名空间,则可以对它们进行分组。

常量可以是数组

define('NAMES', [
'first' => 'John',
'middle' => 'Fitzgerald',
'last' => 'Kennedy'
]); echo NAMES['last']; //显示 "Kennedy"

  

太空船操作符

它的写法是这样的 <=>。它结合了比较。它表示 “小于,等于或大于”。当使用用户定义的比价函数对数组进行排序时,它非常有用,因为返回值是:

  • 0 如果值相等
  • 1 如果左边的值更大
  • -1 如果右边的值更大

详情

那么,让我们对以下女演员进行排序:

$actressesWithAcademyAwards = [
[ 'name' => 'Katharine Hepburn', 'awards' => 4 ],
[ 'name' => 'Jessica Lange', 'awards' => 2 ],
[ 'name' => 'Meryl Streep', 'awards' => 3 ],
[ 'name' => 'Cate Blanchett', 'awards' => 2 ],
];

  

你可以用一行来代替多行来进行比较:

usort($actressesWithAcademyAwards, function ($a, $b) {
return $a['awards'] <=> $b['awards'];
}); print_r($actressesWithAcademyAwards);

  

返回:

Array
(
[0] => Array
(
[name] => Jessica Lange
[awards] => 2
) [1] => Array
(
[name] => Cate Blanchett
[awards] => 2
) [2] => Array
(
[name] => Meryl Streep
[awards] => 3
) [3] => Array
(
[name] => Katharine Hepburn
[awards] => 4
)
)

  

这是一个非常常见的 PHP 用例,因此太空船操作符可以节省时间。另外,它的可读性更强。

数组的第一 / 最后一个键 (PHP 7.3)

从 PHP 7.3 开始,你可以很容易地得到数组的第一个键和最后一个键:

$array = [ 'v' => 1, 'i' => 2, 'p' => 3 ];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array); print_r($firstKey); // v
print_r($lastKey); // p

  

真的很简单,因为它不影响内部数组指针。

数组延展操作符 (PHP 7.4)

该特性可以实现以下功能:

$abc = range('a', 'c');
$def = range('d', 'f');
$ghi = range('g', 'i');
$all = [...$abc, ...$def, ...$ghi, 'j'];
print_r($all);

  

得到:

Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
[7] => h
[8] => i
[9] => j
)

  

在大多数情况下,它基本取代了 array_merge() .

在大多数情况下,它基本取代了 array_merge() .

箭头函数 (PHP 7.4)

请注意,因为现在它指的是只有一个表达式的短闭包(因此有了 “短” 这个字):

$c = 3;
$addC = fn($x) => $x + $c;
echo $addC(70); // 73

  

不需要 use 关键字。

常量的可见性 (PHP7.1)

class Mother {
private const ERROR_LEVEL_1 = 'achtung';
}

  

可见性有助于确保不应该被覆盖的内容不会被覆盖。在 PHP 7.1 之前,对于类常量(始终是公共的)来说是不可能的。

Constant visibility (PHP7.1)

class Mother {
private const ERROR_LEVEL_1 = 'achtung';
}

  

可见性有助于确保不应被覆盖的内容不被覆盖。在PHP 7.1之前,对于类常量(始终是公共的)这是不可能的。

结语

PHP 7 是强大的。它速度更快,功能更强大。你知道 PHP 7 可以完成这些事吗?

更多内容请访问

八重樱:怎么从一名码农成为架构师的必看知识点:目录大全(持续更新)50W年薪挑战!

PHP 7 中的一些小技巧,你知道的有哪些的更多相关文章

  1. ACM 做题过程中的一些小技巧。

    ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...

  2. C语言中的调试小技巧

    C语言中的调试小技巧 经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的 ...

  3. jquery获取json对象中的key小技巧

    jquery获取json对象中的key小技巧 比如有一个json var json = {"name" : "Tom", "age" : 1 ...

  4. ES6中常用的小技巧,用了事半功倍哦

    ES6中常用的小技巧,如果能在实际项目中能使用到,必定事半功倍: 1. 强制要求参数 ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数. 在下面的例子中,我们写了 ...

  5. C#中使用swagger小技巧

    C#中使用swagger小技巧 swaggerUI显示的接口内容主要用于开发阶段便于与前端联调,不适合发布到对外的站点. 有以下两种方式,让接口不显示在SwaggerUI中 1.使用属性 [ApiEx ...

  6. asp.net mvc route 中新发现的小技巧

    在发现这个小技巧之前,我经常被某些问题困扰,我们以博客园为例 1:是分类名称 2:是分类url 3:点击分类,进入的页面,要显示分类的名称 4:点击分类,进入的页面,要用分类相关参数 在日常web的开 ...

  7. RS开发中的一些小技巧[不定期更新]

    从9月份一直忙到了现在,项目整体的改版工作也完成了十有八九了,有些事情只有你自己真正的做了,你才能明白:哦,原来还可以这个样子,这样做真的好了很多呢,接下来我就分享一些最近遇到的RS开发的一些小技巧, ...

  8. CSS中的一下小技巧2之CSS3动画勾选运用

    使用CSS3实现动画勾选 相信大家在项目中会经常遇到这种需求:勾选框.现在用CSS3来实现一个动画勾选,只需要一个标签即可完成: 这次需要用到CSS中伪类 after,这个小技巧也是很容易忘记的,所以 ...

  9. CSS中的一下小技巧1之CSS3三角形运用

    使用CSS3实现三角形: 在前端页面中有很多时候会遇到需要三角形图案的时候,以前不知道可以用CSS3实现三角形的时候,一般都是叫UI把三角形图案切出来. 后来知道原来可以用CSS3实现三角形,可是用过 ...

  10. Python 中的一些小技巧

    这里是本人收集的一些 Python 小技巧,目前主要是一些实用函数,适合有一定基础的童鞋观看(不会专门介绍使用到的标准库函数).. 一.函数式编程 函数式编程用来处理数据,感觉很方便.(要是再配上管道 ...

随机推荐

  1. spring学习笔记一:spring介绍

    jar包下载地址:http://repo.spring.io/release/org/springframework/spring/ spring特点: 1.非侵入性 spring框架的API不会在业 ...

  2. jsp页面jstl标签库失效问题

    可能是版本低的问题,启用jstl即可解决(仅供参考) <%@ page isELIgnored="false"%>

  3. js编写trim()函数

    1.js中本身是没有trim函数的,不过你可以自己写一个 function trim(str) {     var newStr = str.replace(/^\s*$/g,'')     retr ...

  4. Gnu pgp加密解密

    在生成密钥的时候,无法生成足够多的随机数,提示“ Not enough random bytes available. Please do some other work to givethe OS ...

  5. js中的基本类型和引用类型

    基本数据类型:按值访问,可操作保存在变量中的实际的值.基本类型值指的是简单的数据段. 基本数据类型有这六种:undefined.null.string.number.boolean.symbol(es ...

  6. 视频描述(Video Captioning)近年重要论文总结

    视频描述 顾名思义视频描述是计算机对视频生成一段描述,如图所示,这张图片选取了一段视频的两帧,针对它的描述是"A man is doing stunts on his bike", ...

  7. 7-8 jmu-python-从列表中删除元素 (15 分)

    删除列表中所有符合条件的值. 输入格式: 输入n,代表要测试n次.每次测试:首先,输入1行字符串(字符串内的元素使用空格分隔)然后,输入要删除的元素x. 输出格式: 输出删除元素x后的每行字符串.如果 ...

  8. Asp.Net Core Endpoint 终结点路由之中间件应用

    一.概述 这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章: Asp.Net Core EndPo ...

  9. 端口占用的一种形式 Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8090"] java.net.BindException: Address already in use: JVM_Bind <null>:8090

    严重: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8090"]java.ne ...

  10. HTML5中form的新增属性或元素

    1.新增的表单元素 1.1 progress表示任务的完成情况,常用于进度条. max 定义进度元素所要求的任务的工作量,默认值为1 value 定义已经完成的工作量,如果max值为1,该值必须是介于 ...