提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.
适用场景:
当你需要访问一个聚合对象,而这个对象不论是什么,你都需要遍历的时候,就用迭代器.
UML:
示例代码:
class User { private $name,$regTime,$money; public function __construct($name, $regTime) { $this->name = $name; $this->regTime = $regTime; } public function setMoney($money) { $this->money = $money; } public function __toString() { return "{$this->name} : {$this->regTime} : {$this->money}"; } } class UserIterator implements Iterator { private $users = array(); private $valid = false; public function __construct() { try{ $sql = "SELECT * FROM yx_users"; $pdo = new PDO('mysql:host=localhost;dbname=db_zuiyouxin', 'root', 'root'); $res = $pdo->query($sql); foreach ($res as $row) { $user = new User($row['name'], $row['created_at']); $user->setMoney($row['money']); $this->users[$row['id']] = $user; } $pdo = null; } catch (Exception $e) { die('Error:' . $e->getMessage()); } } public function current() { return current($this->users); } public function next() { $this->valid = (next($this->users) === false) ? false : true; } public function key() { return key($this->users); } public function valid() { return $this->valid; } public function rewind() { $this->valid = (reset($this->users) === false) ? false : true; } } $users = new UserIterator(); foreach ($users as $key => $val) { echo $key; echo $val; echo "<br>"; }