PHP 中的对象可以进行 foreach 遍历,底层原理是 PHP 引擎在遍历对象时会调用对象的 Iterator 接口方法,这个接口定义了 foreach 遍历对象时需要用到的方法,包括:
Iterator::rewind():将迭代器指针重置到第一个元素。
Iterator::valid():判断迭代器当前指针是否指向有效的元素。
Iterator::key():获取迭代器当前指针所指向的元素的键。
Iterator::current():获取迭代器当前指针所指向的元素的值。
Iterator::next():将迭代器指针移动到下一个元素。
当对象实现了 Iterator 接口时,就可以使用 foreach 对其进行遍历,而不需要使用 toArray() 将对象转换为数组。下面是一个简单的示例:
class MyIterator implements Iterator {
private $position = 0;
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);
public function __construct() {
$this->position = 0;
}
function rewind() {
$this->position = 0;
}
function current() {
return $this->array[$this->position];
}
function key() {
return $this->position;
}
function next() {
++$this->position;
}
function valid() {
return isset($this->array[$this->position]);
}
}
$it = new MyIterator;
foreach($it as $key => $value) {
echo "$key: $value\n";
}
输出结果为:
0: firstelement
1: secondelement
2: lastelement
可以看到,对象实现了 Iterator 接口,然后通过 foreach 对其进行遍历,遍历过程中会自动调用 Iterator 接口的方法,从而完成遍历操作。