PHP实现迭代器

简介:

不多说,对于PHP的新手来说,学习到了。


<?php
/**
 * 迭代器的公用接口
 */
interface NewIterator{
 public function hasNext();
 public function Next();
}
 
/**
 * 书目的迭代器,实现NewIterator接口
 */
class BookIterator implements NewIterator {
 private $array = array();//记录整个内容
 private $num = 0;//记录索引
  
 public function __construct($_string){
  //因为在我的例子里需要这样处理。
  if (is_array($_string)){
   $this->array = $_string;
  }else{
   $this->array = explode("|",$_string);
  }
 }
  
 public function next(){
  //记录下一项的内容
  $arrayA = $this->array[$this->num];
  //索引增加1
  $this->num = $this->num + 1;
  return $arrayA;
 }
  
 public function hasNext(){
  if($this->num >= count($this->array) || $this->array[$this->num] == null){
   return false;
  }else{
   return true;
  }
 }
}
 
/**
 * 数目是用数组存储的
 */
class BookA{
 private $bookarray = array();
  
 public function __construct(){
  $this->addItem("深入浅出设计模式");
  $this->addItem("think in java");
  $this->addItem("php手册");
 }
  
 public function addItem($_string){
  $this->bookarray[]=$_string;
 }
 //这里不再返回一个数组。而是一个真正的对象。数组被传递到了迭代器中。实现和书目调用的解耦
 public function getIterator(){
  return new BookIterator($this->bookarray);
 }
}
 
/**
 * 书目都是用字符串存储的
 */
class BookB{
 private $bookindex="";
  
 public function __construct(){
  $this->addItem("深入浅出设计模式");
  $this->addItem("PHP");
  $this->addItem("think in java");
 }
  
 public function addItem($_string){
  $this->bookindex.="|".$_string;
 }
  
 public function getIterator(){
  return new BookIterator(trim($this->bookindex,"|"));//附带的处理而已
 }
}
 
/**
 * 输出两个书店的书目
// */
//require "NewIterator.php";
//require 'BookA.php';
//require 'BookB.php';
//require "BookIterator.php";
  
class BookList{
 private $bookarray;
 private $bookstring;
  
 public function __construct(BookA $_booka,BookB $_bookb){
  $this->bookarray = $_booka; 
  $this->bookstring = $_bookb;
  //改装成了只记录对象引用;
 }
  
 public function Menu(){
   $bookaiterator = $this->bookarray->getIterator();
   echo "书店A的书目:"."</br>";
   $this->toString($bookaiterator);
   echo "</br>";
   $bookbiterator = $this->bookstring->getIterator();
   echo "书店B的书目:"."</br>"; 
   $this->toString($bookbiterator);
 }
 public function toString(NewIterator $_iterator){
  while ($_iterator->hasNext()){
   echo $_iterator->Next()."</br>";
  }
 }
}
 
$booka=new BookA();
$bookb=new BookB();
$a = new BookList($booka,$bookb);
$a->Menu();
 
?>

目录
相关文章
|
XML NoSQL PHP
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
230 0
|
缓存 移动开发 NoSQL
php结合redis实现高并发下的抢购、秒杀功能的实例
php结合redis实现高并发下的抢购、秒杀功能的实例
257 0
|
PHP
github与gitee代码自动同步到服务器实现PHP项目自动部署webhooks
github与gitee代码自动同步到服务器实现PHP项目自动部署webhooks
516 0
github与gitee代码自动同步到服务器实现PHP项目自动部署webhooks
|
网络协议 Linux 网络安全
php实现websocket实时消息推送
php实现websocket实时消息推送
531 0
php实现websocket实时消息推送
|
PHP
php实现数字格式化,数字每三位加逗号的功能函数169856420=&gt;169,856,420
php实现数字格式化,数字每三位加逗号的功能函数169856420=&gt;169,856,420
214 0
|
PHP
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
425 0
|
消息中间件 PHP Windows
PHP实现php-amqplib/php-amqplib实例RabbitMq
PHP实现php-amqplib/php-amqplib实例RabbitMq
259 0
|
XML 移动开发 JSON
PHP使用yansongda/pay实现支付宝和微信的支付
PHP使用yansongda/pay实现支付宝和微信的支付
1079 0
|
NoSQL PHP Redis
PHP结合redis实现点赞功能
PHP结合redis实现点赞功能
144 0
|
消息中间件 缓存 JSON
PHP实现think-queue介绍
PHP实现think-queue介绍
428 0