B10:迭代器模式 Iterator
提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.
适用场景:
当你需要访问一个聚合对象,而这个对象不论是什么,你都需要遍历的时候,就用迭代器.
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>";
}
浙公网安备 33010602011771号