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>";
}

  

原文地址:https://www.cnblogs.com/itfenqing/p/7791722.html