Iterator パターンとは
リストの内部構造を隠したまま、それぞれの要素にアクセスさせるためのパターン
オブジェクトに対する反復操作をおこなうための統一APIを提供するパターン
Iterator パターンのメリット
- 利用者に、「どの様な構造を持つリストなのか」を意識させないようにできます。
実装例
<?php
class Employee
{
private $name;
private $age;
private $job;
public function __construct($name, $age, $job)
{
$this->name = $name;
$this->age = $age;
$this->job = $job;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
public function getJob()
{
return $this->job;
}
}
class Employees implements IteratorAggregate
{
private $employees;
public function __construct()
{
$this->employees = new ArrayObject();
}
public function add(Employee $employee)
{
$this->employees[] = $employee;
}
public function getIterator()
{
return $this->employees->getIterator();
}
}
$employees = new Employees();
$employees->add(new Employee('SMITH', 32, 'CLERK'));
$employees->add(new Employee('ALLEN', 26, 'SALESMAN'));
$employees->add(new Employee('MARTIN', 50, 'SALESMAN'));
$employees->add(new Employee('CLARK', 45, 'MANAGER'));
$employees->add(new Employee('KING', 58, 'PRESIDENT'));
$iterator = $employees->getIterator();
while ($iterator->valid()) {
$employee = $iterator->current();
printf(
"%s (%d, %s)\n",
$employee->getName(),
$employee->getAge(),
$employee->getJob()
);
$iterator->next();
}