php 使你的PHP对象可被foreach,属性用Private修饰的
使你的PHP对象可被foreach,属性用Private修饰的 无聊时玩一玩。遍历对象其实只是遍历对象中特定的一个数组类型的属性而已。PHP5后可以直接foreach,但是类的私有成员访问不到。面向对象
无聊时玩一玩。
遍历对象其实只是遍历对象中特定的一个数组类型的属性而已。
PHP5后可以直接foreach,但是类的私有成员访问不到。
面向对象的原则也不允许类成员被外部直接访问。
<?php
/*
* @class Sample
* @remark 遍历对象其实只是变量该对象里的一个数组而已;要使得该对象能被遍历,需实现iterator接口
*/
class Sample implements iterator
{
private $v1 = '123';
private $v2 = 'abc';
private $v3 = array( 1, 2, 3 );
public function rewind()
{
/*
* get_object_vars 该函数查下手册可以看它的功能
* 这里把Sample对象实现定义好的属性,而不是动态生成的属性$data合并成一个数组,
* 把该组赋值给$data
*/
$this->data = get_object_vars ( $this );
/*
* 把iterator接口中的游标指向 $data 的第一个元素
*/
reset( $this->data );
}
public function current() { return current( $this->data ); }
public function key() { return key( $this->data ); }
public function next() { return next( $this->data ); }
public function valid() { return ( $this->current() !== false ); }
}
$s = new Sample();
foreach( $s as $k=>$v ){ echo $k.'='.$v.'<br/>';}
//该片段来自于http://outofmemory.cn
精彩图集
精彩文章






