} //FilterIteratorのサブクラスは、必ずこのメソッドをオーバーライドする。 //true・falseを返すように実装する public function accept() { $employee = $this->getInnerIterator()->current(); //イテレータクラス内部では、こんな感じでgetInnerIteratorをよく使うことになるだろう return $employee->getJob() === 'SALESMAN'; } } /* * Client Class */ //ConcreteAggregateインスタンスの生成 $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の利用その1 $iterator = $employees->getIterator(); echo '<ul>'; while ($iterator->valid()) { //validで有効性を検証 $employee = $iterator->current(); //currentで現在一に対応するオブジェクトを取れる printf('<li>%s (%d, %s)</li>', $employee->getName(), $employee->getAge(), $employee->getJob()); $iterator->next(); //iteratorを次に進める var_dump($iterator->current());