现在有这么两个类,Department部门类、Employee员工类:
//部门类classDepartment{private$_name;
private$_employees;
function__construct($name){$this->_name = $name;
$this->employees = array();
}
functionaddEmployee(Employee $e){$this->_employees[] = $e;
echo"员工{$e->getName()}被分配到{$this->_name}中去";
}
}
//员工类classEmployee{private$_name;
function__construct($name){$this->_name = $name;
}
functiongetName(){return$this->_name;
}
}
//应用:$lsgo = new Department('LSGO实验室');
$e1 = new Employee("小锦");
$e2 = new Employee("小猪");
$lsgo->addEmployee($e1);
$lsgo->addEmployee($e2);
好了,现在LSGO实验室已经有两个部员了,现在我想把全部的部员都列出来,就是用循环来获取部门的每个员工的详情。
在这里我们用PHP中的SPL标准库提供的迭代器来实现。
《大话设计模式》中如是说:
迭代器模式:迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。
迭代器模式的作用简而言之:是使所有复杂数据结构的组件都可以使用循环来访问
假如我们的对象要实现迭代,我们使这个类实现 Iterator(SPL标准库提供),这是一个迭代器接口,为了实现该接口,我们必须实现以下方法:
- current(),该函数返回当前数据项
- key(),该函数返回当前数据项的键或者该项在列表中的位置
- next(),该函数使数据项的键或者位置前移
- rewind(),该函数重置键值或者位置
- valid(),该函数返回 bool 值,表明当前键或者位置是否指向数据值
实现了 Iterator 接口和规定的方法后,PHP就能够知道该类类型的对象需要迭代。