PHP 7.4 新功能一览之短闭包

PHP 7.4 新功能一览之短闭包

Chris Yue No Comment
Posts

不出意外,我们将在今年(2019)11月份等到 PHP 新版的发布,对于 PHP 的又一个新版本我们有将有什么期待呢?

本来我是想一篇文章全部介绍完的,但发现很多新功能其实也有很多细节可以说,对于我这个平时还要上班的人来说,全部写完再发布难度有点大,还是分开成几篇说吧。

之前你要获取一组对象的某一个属性变成一维数组,可能最便捷的方式是

$ids = array_map(function ($model) { return $model->id; }, $models);

在 PHP 7.4 中,你可以

$ids = array_map(fn($model) => $model->id, $models);

写过 Javascript 的同学是不是感到有点亲切?

当然,加 type hint 也是可以的,按值传递也可以

$ids = array_map(fn&(Model $model): int => $model->id, $models);

另外还有一点:无需 use 即可获取函数外部变量

$cat  = new Cat();
array_walk($mice, fn(Mouse $mouse) => $cat->eat($mouse));

短闭包也有其限制:只能包含一句表达式,可能语法设计者认为如果多行的话这语法糖的意义就不是很大了吧。不过本人觉得没啥关系,我的经验来说,这种一行代码的匿名函数写得还是很多的,并且结合其他的语法糖,也可以在一句表达式里包含一些简单逻辑,依然简单漂亮:

$results = array_map(fn(Student $student): string => $student->getScore() > 60 ? 'pass' : 'failed', $students);
// 另外一个例子
array_walk($mice, fn(Mouse $mouse) => $cat->canEat($mouse) and $cat->eat($mouse));

PHP 7.4 新功能一览之短闭包 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人

发表评论

51 − = 46