可以使用 foreach 循环来遍历 PHP 类的对象的所有公开可见成员。此功能已在 PHP 5 及更高版本中可用。当然,您可以访问实例方法中的 private 属性列表。
PHP 还定义了可用于此目的的 迭代器(Iterator)接口。
使用 foreach 循环
在下面的示例中,使用 foreach 循环列出了类的公共属性。
它将产生以下输出 -
x => 100
y => 200
z => 300
y => 200
z => 300
请注意,只有 public 成员可以在类外部访问。如果类包含方法,则所有成员(public、private 或 protected)都可以使用其内部的 foreach 循环遍历。
让我们在上面的 myclass 添加一个 iterate 方法。
调用此实例方法可获取所有成员的列表。
它将产生以下输出 -
var : Hello World
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
x : 100
y : 200
z : 300
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
x : 100
y : 200
z : 300
使用迭代(Iterator) 接口
PHP 为外部迭代器或对象提供了 迭代(Iterator) 接口,这些迭代器或对象可以在内部自行迭代。它定义了以下需要在用户定义的类中实现的抽象方法。
- rewind() 方法将 Iterator 倒回第一个元素。这是启动 foreach 循环时调用的第一个方法。它不会在 foreach 循环后执行。
- current() 方法返回当前元素。
- key() 方法在 foreach 循环的每次迭代中返回当前元素的键。
- next() 方法在 foreach 循环的每次迭代后调用,并向前移动到下一个元素。
- valid() 方法检查当前位置是否有效。
示例
以下示例通过实现 Iterator 接口演示了对象迭代
它将产生以下输出 -
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: 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: