Laravel 5.4 新特性系列 —— 新增对集合元素的高阶消息传递支持

higher-order-messaging

Laravel 5.4 正处于开发进行时,随着新版本代码的合并,一些新的功能特性也随之泄露。其中之一就是对集合进行高阶消息传递的支持。所谓高阶消息传递(Higher Order Messaging)实际上是一种设计模式,用于以纯面向对象的方式对对象集合进行查询和操作(关于高阶消息传递,参考国外这篇文章)。

展示新功能特性的最好方式莫过于通过实例代码,假设你有一个集合并且想要对其中每个元素进行操作:

$invoices->each(function($invoice) { 
    $invoice->pay(); 
});

通过新的特性你可以将上述代码简化如下:

$invoices->each->pay();

另外一个演示示例如下:

$employees->reject(function($employee) { 
    return $employee->retired; 
})->each(function($employee) { 
    $employee->sendPayment(); 
});

同样,通过5.4的新功能我们可以将其简化如下:

$employees->reject->retired->each->sendPayment();

是不是感觉很酷?关于其实现原理可参考代码提交记录:https://github.com/laravel/framework/pull/16267/files

声明:本文整理翻译自https://laravel-news.com

学院君 has written 883 articles

Laravel学院院长,终身学习者

积分:99857 等级:P12 职业:码农 城市:杭州

8 条回复

  1. 王建民 王建民 says:
    这样封装 我这样的新手会很蒙逼
  2. kylesean kylesean says:
    函数式风格,链式调用,封装再封装,卧槽
  3. laravela laravela says:
    @ 测试 确实,并不复杂,这就是框架设计者与框架使用者的区别啊。。
  4. 崇义将军 崇义将军 says:
    其实原理并不复杂,但是能想到并以一个很优雅的方式实现缺非常值得称赞。
  5. 骑猪看月赏嫦娥 骑猪看月赏嫦娥 says:
    升级的好快啊。。。。都5.4了

登录后才能进行评论,立即登录?