黑马程序员技术交流社区

标题: foreach遍历Laravel集合对象 [打印本页]

作者: wendyYao    时间: 2018-1-5 16:17
标题: foreach遍历Laravel集合对象
【foreach循环对象,建是属性名,值是属性值】
class Stu
{
        public $a = 'a1';
        public $b = 'b2';
        protected $c = 'c3';

        public function d() {}
}
// //创建对象
$stuObj = new Stu;

foreach ($stuObj as $key => $v) {
        print_r($key);
        print_r($v);
        echo '<hr />'; //
}
【结论】只有公开的属性才可以遍历
【foreach循环受保护型属性】
class smallObj
{
        public $name = 'h';
        public $age = 'hh';
}
class Stu implements IteratorAggregate
{
        protected $items;

        public function __construct()
        {
                $this->items = array(
                        new smallObj,
                        new smallObj,
                        new smallObj
                );
        }

        //说明:实现IteratorAggregate接口里面的抽象方法
        //触发:当foreach时候触发
    public function getIterator() {
                       //通过ArrayIterator迭代器遍历$this->items挨个返回给$v
        return new ArrayIterator($this->items);//通过ArrayIterator迭代器过滤items属性
    }
}
//创建对象
$stuObj = new Stu;
echo '<pre>';
// print_r($stuObj);
foreach ($stuObj as $key => $v) {
        print_r($v);

}

laravel底层在foreach执行的时候触发了getIterator这个方法,然后在通过迭代器遍历每个item属性,并赋值。所以我们在foreach遍历对象的时候直接得到的是数据表中的每一条记录。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2