Примеры итерации на PHP с использованием встроенных интерфейсов.
Итерация простого объекта
name = 'Иван Иванов';
$this->age = 20;
$this->balance = 100.00;
$this->status = 'active';
}
/**
* Итерирование.
*/
public function iterate(): void
{
foreach ($this as $property => $value) {
echo $property . ' > ' . $value . PHP_EOL;
}
}
}
$user = new User();
foreach ($user as $property => $value) {
echo $property . ' > ' . $value . PHP_EOL;
}
echo PHP_EOL . '--------------------------' . PHP_EOL . PHP_EOL;
$user->iterate();
Вывод:
name > Иван Иванов
age > 20
--------------------------
name > Иван Иванов
age > 20
balance > 100
status > active
Итерация через стандартный интерфейс PHP
elements = $array;
}
/**
* {@inheritDoc}
*/
public function rewind()
{
echo 'Возврат к началу.' . PHP_EOL;
reset($this->elements);
}
/**
* {@inheritDoc}
*/
public function current()
{
$element = current($this->elements);
echo 'Текущий элемент: ' . $element . PHP_EOL;
return $element;
}
/**
* {@inheritDoc}
*/
public function key()
{
$key = key($this->elements);
echo 'Ключ текущего элемента: ' . $key . PHP_EOL;
return $key;
}
/**
* {@inheritDoc}
*/
public function next()
{
$element = next($this->elements);
echo 'Следующий элемент: ' . $element . PHP_EOL;
return $element;
}
/**
* {@inheritDoc}
*/
public function valid()
{
$key = key($this->elements);
$result = ($key !== null && $key !== false);
echo 'Правильность позиции: ' . $result . PHP_EOL;
return $result;
}
}
foreach (new MyIterator([1, 2, 3]) as $key => $value) {
echo $key . ' > ' . $value . PHP_EOL . PHP_EOL;
}
echo PHP_EOL . '--------------------------' . PHP_EOL . PHP_EOL;
/**
* Своя коллекция.
*
* @package ITReviewChannel
*/
class MyCollection implements \IteratorAggregate
{
/**
* @var array $elements Элементы.
*/
private array $elements;
/**
* Конструктор.
*
* @param array $elements Элементы.
*/
public function __construct(array $elements)
{
$this->elements = $elements;
}
/**
* {@inheritDoc}
*/
public function getIterator()
{
return new MyIterator($this->elements);
}
}
foreach (new MyCollection(['Value 1', 'Value 2', 'Value 3']) as $key => $value) {
echo 'Ключ/значение: [' . $key . ' > "' . $value . '"]' . PHP_EOL . PHP_EOL;
}
Вывод:
Возврат к началу.
Правильность позиции: 1
Текущий элемент: 1
Ключ текущего элемента: 0
0 > 1
Следующий элемент: 2
Правильность позиции: 1
Текущий элемент: 2
Ключ текущего элемента: 1
1 > 2
Следующий элемент: 3
Правильность позиции: 1
Текущий элемент: 3
Ключ текущего элемента: 2
2 > 3
Следующий элемент:
Правильность позиции:
--------------------------
Возврат к началу.
Правильность позиции: 1
Текущий элемент: Value 1
Ключ текущего элемента: 0
Ключ/значение: [0 > "Value 1"]
Следующий элемент: Value 2
Правильность позиции: 1
Текущий элемент: Value 2
Ключ текущего элемента: 1
Ключ/значение: [1 > "Value 2"]
Следующий элемент: Value 3
Правильность позиции: 1
Текущий элемент: Value 3
Ключ текущего элемента: 2
Ключ/значение: [2 > "Value 3"]
Следующий элемент:
Правильность позиции:
Комментарии (0)