最初感觉
看到官方概念,第一句,这是什么?性能大大提升,哇,生成器,这么牛逼,很高大上。
其实也真的很牛。
自己测试代码(结合官方文档和博客)
首先,看看文档当中继承了 Iterator
这个接口
示例代码:
class MyIterator implements Iterator {
private $arr = [];
public function __construct(Array $arr) {
$this -> arr = $arr;
}
public function rewind() {
var_dump(__METHOD__);
reset($this -> arr);
}
public function current() {
var_dump(__METHOD__);
return current($this->arr);
}
public function key() {
var_dump(__METHOD__);
return key($this->arr);
}
public function next() {
var_dump(__METHOD__);
return next($this->arr);
}
public function valid() {
var_dump(__METHOD__);
return array_key_exists(key($this -> arr), $this->arr);
}
}
$it = new MyIterator([
'e' => 3,
'q' => 1,
't' => 23,
'2' => 3,
]);
foreach($it as $key => $value) {
echo "\n";
var_dump($key, $value);
}
子会输出一下内容
string(18) "MyIterator::rewind"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"
string(1) "e"
int(3)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"
string(1) "q"
int(1)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"
string(1) "t"
int(23)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"
int(2)
int(3)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
学到了
上面的 foreach
可以写作下面的样子
for ($it -> rewind(); $it -> valid(); $it -> next()){
$val = $it -> current();
$key = $it -> key();
echo $key,"\n",$val;
}
评论已关闭