设计模式之迭代器模式
来源:互联网 发布:c语言头文件大全及含义 编辑:程序博客网 时间:2024/04/29 22:16
<?php/**迭代器模式迭代的使用任何数据类型的数据php提供了两个接口**//** * Interator在内部迭代自己的类的接口 * * Iterator extends Traversable { abstract public mixed current ( void ) abstract public scalar key ( void ) abstract public void next ( void ) abstract public void rewind ( void ) abstract public boolean valid ( void ) } * *//* * IteratorAggregate 创建外部迭代器的接口 * * IteratorAggregate extends Traversable { abstract public Traversable getIterator ( void ) } * * * * */class A{ private $_name; public function __construct($name){ $this->_name = $name; }}class myIterator implements Iterator{ private $_p; private $_data; public function __construct(){ $this->_data = array(new A("apple"), new A("banana"), new A("blow")); $this->_p = 0; } public function current() { return array_key_exists($this->_p, $this->_data) ? $this->_data[$this->_p] : false; } public function key() { return $this->_p; } public function next() { $this->_p++; } public function rewind() { $this->_p = 0; } public function valid() { return array_key_exists($this->_p, $this->_data); }}$test = new myIterator();foreach ($test as $key => $value){ echo "$key => "; var_dump($value); echo "\n";}class myIterator2 implements IteratorAggregate{ private $_data; public function __construct() { $this->_data = array(new A("apple"), new A("banana"), new A("blow")); } public function getIterator() { //if $this->_data change with $this it will iterator the property return new ArrayIterator($this->_data); }}$test = new myIterator2();foreach ($test as $key => $value){ echo "$key => "; var_dump($value); echo "\n";}