php对象遍历

来源:互联网 发布:java fastjson 转数组 编辑:程序博客网 时间:2024/05/16 04:51

因为php对象也是复合数据类型(还一种复合数据类型是数组),既然是复合数据类型,所以也能对其遍历,不过对对象的遍历其实就是对其属性的遍历

class  A{

  public $name = '酱油';

  private $age = 18;

  public $hobby = array();

  public function test(){}

}

$a = new A;

foreach($a as $k=>$v){

  var_dump($k,$v);

}

运行结果如下:

string(4) "name" string(6) "酱油" string(5) "hobby" array(0) { }

这里我们可以看到对象的遍历只遍历public属性(其实遍历也等于类外访问,限定修饰符依然有作用)

但是有的时候我们想对对象的遍历的时候,遍历的是其中的一个是数组的对象的元素,像上个例子中的hobby,如果我们想遍历对象的时候和遍历hobby属性的效果一样,那么我们需要实现Iterator这个接口,代码如下:

class  A implements Iterator{
    public $name = '酱油';
    private $age = 18;
    public $hobby = array('游泳','旅游','玩游戏');
    public function test(){}
    public function addPlayer($p) {
$this->hobby[] = $p;
}
public function rewind() {     //初始化
reset($this->hobby);
}
public function valid() {      //合法性验证
return key($this->hobby) !== NULL;
}
public function current() {    //获得值变量
return current($this->hobby);
}
public function key() {       //获得键变量
return key($this->hobby);
}
public function next() {     //移动指针
next($this->hobby);
}
}
$a = new A;
foreach($a as $k=>$v){
  var_dump($k,$v);
}

运行结果如下:

int(0) string(6) "游泳" int(1) string(6) "旅游" int(2) string(9) "玩游戏"

Foreach是根据当前对象所属类是否实现了Iterator接口来决定foreach遍历类型的。


0 0
原创粉丝点击