Collection, 打开源码你会发现,它实现了很多Array相关的接口:

其中有一个是IteratorAggregate,顾名思义就是跟遍历迭代的接口。这是PHP内部定义的类,自从PHP5.5就有支持了。 继续打开这个类:

看红色部分,这个接口就是用来检测当前类是否在被foreach语句进行遍历,这只是一个接口,因为是被调用,调用者会检查这个类是否有这个特性,就是靠这个接口,IteratorAggregate 这个类就是实现了这个接口,做了遍历对应的操作。比如获取指针啦,移动指针啦各种。具体的你可以接着看源代码。所以你也实现这个类,你的类也能被foreach遍历。
Laravel框架我们都说优雅,但是具体优雅体现在它的设计理念,各个模块的耦合上,可以多去看看源码,会发现不只是好用,是真的优雅。还有php自己的特性也不能忽略,过度依赖框架,会让你忽视php语言本身的能力。不扯了,大概就是这个意思吧,不对的地方,欢迎指出。