В этой статье описывается шаблон итератора шаблона проектирования 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.