• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

迭代器模式及其php实现(Yii框架)

PHP admin 1年前 (2018-06-08) 15次浏览 未收录 0个评论

迭代器模式是一种行为型模式,它是一种最简单也最常见的设计模式。它可以让使用者透过特定的接口巡访容器中的每一个元素而不用了解底层的实际操作。

适用性

在希望利用语言本身的遍历函数便利自定义结构时,例如PHP中的foreach函数

类图

迭代器模式及其php实现(Yii框架)

PHP实例

_items = $data;
   }
   public function current() {
       return current($this->_items);
   }

   public function next() {
       next($this->_items);   
   }

   public function key() {
       return key($this->_items);
   }

   public function rewind() {
       reset($this->_items);
   }

   public function valid() {                                                                              
       return ($this->current() !== FALSE);
   }
}

// client
$data = array(1, 2, 3, 4, 5);
$sa = new sample($data);
foreach ($sa AS $key => $row) {
   echo $key, ' ', $row, '
'; } ?>

在Yii框架中的实现:

在Yii框架中的我们可以看到其迭代器的实现,在collections目录下的CMapIterator.php文件中,其实现如下:

class CMapIterator implements Iterator {
/**
* @var array the data to be iterated through
*/
    private $_d;
/**
* @var array list of keys in the map
*/
    private $_keys;
/**
* @var mixed current key
*/
    private $_key;
 
/**
* Constructor.
* @param array the data to be iterated through
*/
    public function __construct(&$data) {
        $this->_d=&$data;
        $this->_keys=array_keys($data);
    }
 
/**
* Rewinds internal array pointer.
* This method is required by the interface Iterator.
*/
    public function rewind() {                                                                                 
        $this->_key=reset($this->_keys);
    }
 
/**
* Returns the key of the current array element.
* This method is required by the interface Iterator.
* @return mixed the key of the current array element
*/
    public function key() {
        return $this->_key;
    }
 
/**
* Returns the current array element.
* This method is required by the interface Iterator.
* @return mixed the current array element
*/
    public function current() {
        return $this->_d[$this->_key];
    }
 
/**
* Moves the internal pointer to the next array element.
* This method is required by the interface Iterator.
*/
    public function next() {
        $this->_key=next($this->_keys);
    }
 
/**
* Returns whether there is an element at current position.
* This method is required by the interface Iterator.
* @return boolean
*/
    public function valid() {
        return $this->_key!==false;
    }
}
 
$data = array('s1' => 11, 's2' => 22, 's3' => 33);
$it = new CMapIterator($data);
foreach ($it as $row) {
    echo $row, '
'; }

这与之前的简单实现相比,其位置的变化是通过控制key来实现的,这种实现的作用是为了避免false作为数组值时无法迭代。


39MO , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:迭代器模式及其php实现(Yii框架)
喜欢 (0)
[1353713598@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址