Итерация простого объекта
<?php namespace ITReviewChannel; /** * Пользователь. * * @package ITReviewChannel */ class User { /** * @var string $name Имя. */ public string $name; /** * @var int $age Возраст. */ public int $age; /** * @var float $balance Баланс. */ protected float $balance; /** * @var string $status Статус. */ private string $status; /** * Конструктор. */ public function __construct() { $this->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
<?php namespace ITReviewChannel; /** * Свой итератор. * * @package ITReviewChannel */ class MyIterator implements \Iterator { /** * @var array $elements Элементы. */ private array $elements; /** * Конструктор. * * @param array $array Элементы. */ public function __construct(array $array) { $this->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"] Следующий элемент: Правильность позиции:
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.