PHP基于SPL实现的迭代器模式示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-09-12 14:59:03 浏览: 评论:0
这篇文章主要介绍了PHP基于SPL实现的迭代器模式,简单描述了迭代器模式的概念、原理并结合实例形式分析了php使用SPL实现迭代器模式的相关操作技巧与注意事项,需要的朋友可以参考下。
本文实例讲述了PHP基于SPL实现的迭代器模式,分享给大家供大家参考,具体如下:
现在有这么两个类,Department部门类、Employee员工类:
- //部门类
- class Department{
- private $_name;
- private $_employees;
- function __construct($name){
- $this->_name = $name;
- $this->employees = array();
- }
- function addEmployee(Employee $e){
- $this->_employees[] = $e;
- echo "员工{$e->getName()}被分配到{$this->_name}中去";
- }
- }
- //员工类
- class Employee{
- private $_name;
- function __construct($name){
- $this->_name = $name;
- }
- function getName(){
- 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就能够知道该类类型的对象需要迭代。
我们使用这种方式重构 Department 类:
- class Department implements Iterator
- {
- private $_name;
- private $_employees;
- private $_position;//标志当前数组指针位置
- function __construct($name)
- {
- $this->_name = $name;
- $this->employees = array();
- $this->_position = 0;
- }
- function addEmployee(Employee $e)
- {
- $this->_employees[] = $e;
- echo "员工{$e->getName()}被分配到{$this->_name}中去";
- }
- //实现 Iterator 接口要求实现的方法
- function current()
- {
- return $this->_employees[$this->_position];
- }
- function key()
- {
- return $this->_position;
- }
- function next()
- {
- $this->_position++;
- }
- function rewind()
- {
- $this->_position = 0;
- }
- function valid()
- {
- return isset($this->_employees[$this->_position]);
- }
- }
- //Employee 类同前
- //应用:
- $lsgo = new Department('LSGO实验室');
- $e1 = new Employee("小锦");
- $e2 = new Employee("小猪");
- $lsgo->addEmployee($e1);
- $lsgo->addEmployee($e2);
- echo "LSGO实验室部员情况:";
- //这里其实遍历的$_employee
- foreach($lsgo as $val){
- echo "部员{$val->getName()}";
- }
附加:假如现在我们想要知道该部门有几个员工,如果是数组的话,一个 count() 函数就 ok 了,那么我们能不能像上面那样把对象当作数组来处理?SPL标准库中提供了 Countable 接口供我们使用:
- class Department implements Iterator,Countable{
- //前面同上
- //实现Countable中要求实现的方法
- function count(){
- return count($this->_employees);
- }
- }
- //应用:
- echo "员工数量:";
- echo count($lsgo);
Tags: SPL PHP迭代器
- 上一篇:PHP生成推广海报的方法分享
- 下一篇:php接口实现拖拽排序功能
相关文章
- ·PHP SPL标准库 SplFixedArray 介绍及和Array的性能测试(2015-05-09)
- ·PHP SPL 被遗落的宝石【SPL应用浅析】(2018-06-06)
- ·metasploit框架PHP反向后门建立教程(2018-10-15)
- ·metasploit调用nexpose扫描学习笔记(2018-10-15)
- ·PHP SPL使用方法和他的威力(2020-06-18)
- ·PHP中spl_autoload_register()和__autoload()区别分析(2020-12-14)
- ·PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例(2021-05-26)
- ·PHP SPL标准库之接口(Interface)详解(2021-05-26)
- ·PHP 双链表(SplDoublyLinkedList)简介和使用实例(2021-05-26)
- ·PHP SPL标准库之SplFixedArray使用实例(2021-05-26)
- ·PHP迭代器的内部执行过程详解(2020-06-18)
- ·PHP迭代器和迭代的实现与使用方法分析(2021-09-11)
- ·php和C#的yield迭代器实现方法对比分析(2021-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)