A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wendyYao 中级黑马   /  2018-1-5 16:17  /  2288 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【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遍历对象的时候直接得到的是数据表中的每一条记录。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马