PHP 对象迭代

phpserver side programmingprogramming更新于 2025/8/19 20:07:17

简介

从 PHP 5 开始,可以迭代对象所有可见项的列表。迭代可以使用 foreach 循环以及 iterator 接口执行。PHP 中还有一个 IteratorAggregate 接口可用于此目的

使用 foreach 循环

示例

<?php
class myclass{
   private $var;
   protected $var1;
   public $x, $y, $z;
   public function __construct(){
      $this->var="private variable";
      $this->var1=TRUE;
      $this->x=100;
      $this->y=200;
      $this->z=300;
   }
   public function iterate(){
      foreach ($this as $key => $value) {
         print "$key => $value
";       }    } } $obj = new myclass(); foreach($obj as $key => $value) {    print "$key => $value
"; } echo "
"; $obj->iterate(); ?>

输出

输出如下 −

x => 100
y => 200
z => 300

var => private variable
var1 => 1
x => 100
y => 200
z => 300

使用迭代器接口

此接口定义了以下抽象方法,将在以下示例中实现

abstract public current ( void ) : mixed
abstract public key ( void ) : scalar
abstract public next ( void ) : void
abstract public rewind ( void ) : void
abstract public valid ( void ) : bool

Iterator::current — 返回当前元素

Iterator::key — 返回当前元素的键

Iterator::next — 前进到下一个元素

Iterator::rewind — 将迭代器倒退到第一个元素

Iterator::valid —检查当前位置是否有效

以下示例通过实现 Iterator 接口演示对象迭代

示例

<?php
class myclass implements Iterator{
   private $arr = array('a','b','c');
   public function rewind(){
      echo "rewinding
";       reset($this->arr);    }    public function current(){       $var = current($this->arr);       echo "current: $var
";       return $var;    }    public function key() {       $var = key($this->arr);       echo "key: $var
";       return $var;    }    public function next() {       $var = next($this->arr);       echo "next: $var
";       return $var;    }    public function valid(){       $key = key($this->arr);       $var = ($key !== NULL && $key !== FALSE);       echo "valid: $var
";       return $var;    } } $obj = new myclass(); foreach ($obj as $k => $v) {    print "$k: $v
"; } ?>

输出

以上代码产生以下结果−

rewinding
valid: 1
current: a
key: 0
0: a
next: b
valid: 1
current: b
key: 1
1: b
next: c
valid: 1
current: c
key: 2
2: c
next:
valid:

相关文章