标签归档:Iterator

让你的Class和Array一样

先看这么一段代码。

   $a = new C();
   foreach($a as $k=>$v){
      echo $k.$v.'<br>';
   }
   $b = new B();
   $b['a']='Hello array!';
   echo $b['a'];

应该有一部分人,会奇怪了。PHP中的类也可以这么访问吗?你这段代码会不会是错的啊?

当然没有错,这么做是可以的,而且是正确的。不过你在定义类C和类B的时候,需要动一点儿手脚,不然直接写自然是不正确的。

第一部分,PHP官方为了让用户的类可以实现像数组一样支持foreach语句,定义了Iterator接口,凡是实现了该接口的类,都可以通过foreach的语法来调用。以上定义的类C就实现了该接口。

该接口中包含这么几个方法:

public function current (){} 返回当前元素

public function next () {} 返回下一个元素

public function key () {} 获得当前项的键值

public function valid () {} 是否已经越界

public function rewind (){} 将顺序反转

由此可以看到foreach的原理,每次循环都调用一下valid判断一下是否越界,然后取出建key和值current。然后进行下一次循环。 继续阅读