Рубрики
Uncategorized

Подробное объяснение свойств итерационного объекта итератора в PHP

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

Предисловие

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

class HardDiskDrive {

  public $brand;
  public $color;
  public $cpu;
  public $workState;

  protected $memory;
  protected $hardDisk;

  private $price;

  public function __construct($brand, $color, $cpu, $workState, $memory, $hardDisk, $price) {

    $this->brand = $brand;
    $this->color = $color;
    $this->cpu  = $cpu;
    $this->workState = $workState;
    $this->memory = $memory;
    $this->hardDisk = $hardDisk;
    $this->price = $price;
  }

}

$harddiskdrive = new harddiskdrive ('seagate ',' Silver ',' Tencent ',' well ',' 1t ',' hard ',' $456 ');

foreach ($hardDiskDrive as $property => $value) {

  var_dump($property, $value);
  echo '
'; }

В результате получается:

Строка (5) строка “бренд” (6) строка “Seagate” (5) строка “цвет” (6) строка “серебро” (3) строка “процессор” (7) строка “tencent” (9) строка “рабочее состояние” (4) “хорошо”

Из выходных данных мы также видим, что обычный обход не может получить доступ к защищенным свойствам.

Если мы хотим просмотреть все свойства объекта, нам нужно контролировать поведение foreach, предоставлять больше функций объектам класса и наследовать от интерфейса итератора:

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

В примере на рисунке для каждого из них предусмотрено несколько ключевых шагов: 5.

Пять методов реализации, необходимых в итераторе iterator, используются для того, чтобы помочь каждому реализовать пять ключевых шагов обхода объектов:

Когда foreach пересекает объект, если обнаружено, что объект реализует интерфейс итератора, описанные выше пять шагов не являются поведением foreach по умолчанию, но может быть вызван соответствующий метод объекта:

Пример кода:

class Team implements Iterator {

  //private $name = 'itbsl';
  //private $age = 25;
  //private $hobby = 'fishing';

  private $info = ['itbsl', 25, 'fishing'];

  public function rewind()
  {
    Reset ($this - > info); // reset array pointer
  }

  public function valid()
  {
    //If it is null, it means there is no element, and return false
    //Return true if not null

    return !is_null(key($this->info));
  }

  public function current()
  {
    return current($this->info);
  }

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

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

}

$team = new Team();

foreach ($team as $property => $value) {

  var_dump($property, $value);
  echo '
'; }

резюме

Выше приведено все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет некоторую справочную учебную ценность для вашей учебы или работы. Спасибо вам за вашу поддержку developepaer.