Рубрики
Uncategorized

Анализ принципа шаблона итератора и метода реализации внедрения шаблона проектирования PHP

Автор оригинала: David Wong.

В этой статье описывается шаблон итератора шаблона проектирования PHP. Для вашей справки приведем следующие сведения:

Прежде чем углубиться в этот шаблон дизайна, давайте взглянем на вопрос для интервью из блога Берди,

Название примерно такое:

Позволяет объекту выполнять цикл foreach, как массив, требуя, чтобы свойство было закрытым.

Это трудно реализовать без использования режима итератора. Во-первых, давайте посмотрим на код реализации

пример. php

_arr = $arr;
 }
 
 public function current(){
   return current($this->_arr);
 }
 
 public function next(){
   return next($this->_arr);
 }
 
 public function key(){
   return key($this->_arr);
 }
 
 public function valid(){
   return $this->current() !== false;
 }
 
 public function rewind(){
  reset($this->_arr);
 }
}

пример. php

$v){
  echo $k."-".$v."
"; }

Интерфейс итератора взят из библиотеки классов SPL PHP. После написания соответствующих статей о шаблонах проектирования мы продолжим изучение этой библиотеки классов.

Кроме того, мы нашли в Интернете фрагмент кода о шаблоне итератора в фреймворке Yii

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, '
'; }

Официальное определение шаблона проектирования итератора таково: использование шаблона итератора для обеспечения унифицированного доступа к объектам aggregate, то есть для предоставления внешнего итератора для доступа и обхода объекта aggregate без раскрытия внутренней структуры объекта. Также известен как режим курсора.

Ну, я не совсем понимаю. Почему массив может быть пройден с помощью foreach, но для его реализации нам нужно использовать такой шаблон итератора. Нам нужно подождать, пока наш опыт работы не станет более понятным.

Подробнее о содержании, связанном с PHP заинтересованные читатели могут ознакомиться с этой темой сайта: “Вводный учебник по объектно-ориентированному программированию PHP”, “Навыки работы с массивом PHP (массив)”, “Вводный курс по основному синтаксису PHP”, “Краткое описание операций и использования операторов PHP”, “Краткое описание использования символьной строки (строки) PHP”, “Руководство по вводу в эксплуатацию базы данных PHP + MySQL” и “Общая работа с базой данных PHP” Краткое описание навыков написания

Я надеюсь, что эта статья поможет вам в программировании на PHP.