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