注:本文翻译自FreekVanderHerten编写的Collectiondebuggingskills。看完后很实用,分享给大家。阅读过程中,如有翻译错误,希望大家指正。谢谢。原文链接:https://murze.be/2016/06/debu...最近一直在用Laravel的合集。如果你还不了解集合,我简单说一下:集合(collection)是一个“强大”的数组,具有许多强大的处理其内部数据的功能。但是唯一让我头疼的是如何调试集合的链式操作。以下是我改进的业务流程。使用Collection类,可以使用chain方法通过operation函数处理数据,例如一个例子如下(为了让代码更短,我省略了函数体中的具体实现)collect($items)->filter(function(){...})->unique(function(){...})->map(function(){...})->sortBy(function(){...});想象一下,如果你需要调试这段代码,你想获取map函数的返回值,你会怎么做?然后你可以用dd()包装这个“整个操作”以获得返回值。dd(collect($items)->filter(function(){...})->unique(function(){...})->map(function(){...}))->sortBy(功能(){...});确实,这样就够了,而且整个操作的返回值也是可以打印出来的,但是还是有点琐碎,每次测试操作的开始和结束都要加点东西(开头:'dd(',end:')'),我认为这不是很可读。而且移动dd语句测试也很麻烦,最后的括号特别容易被忽略,所以,虽然我好像解决了这个问题,但我可以保证,如果你这样调试如果是这样,你很快就会觉得很累赘。OK,其实是有解决办法的。Laravel的Collection类是Macroable(暂译为:可扩展的),也就是说我们可以在运行时添加相应的功能。为了改进我们调试的过程,我们可以创建一个简单的dd宏:Collection::macro('dd',function(){dd($this);});为了在项目中使用这个功能,我们需要把上面的代码放到服务的provider.ok中,如下,看这个Blender-我们的laravel模板,例如使用宏调试来调试Collection,它有对我们来说变得非常简单。好的,让我们看看它如何使用.collect($items)->filter(function(){...})->unique(function(){...})->map(function(){...})->dd()->sortBy(函数(){...});为了测试特定链式操作的返回值,可以在操作末尾放置'->dd()'。这样比'dd(....)'更直接,可读性高。调试好后,我们只需要去掉链式运行末尾的代码即可。也可以使用PHPStrom的快捷键'alt+shift+arrow-up'和'alt+shift+arrow-down'可以更方便地将'->dd()'部分移动到上一个或下一个链操作。总之,你也可以去Laravel的官方文档和RefactoringtoCollection试试阅读章节中文版:RefactoringtoCollection
