<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_23820"> 无聊时玩一玩。 <br> 遍历对象其实只是遍历对象中特定的一个数组类型的属性而已。 <br> PHP5后可以直接foreach,但是类的私有成员访问不到。 <br> 面向对象的原则也不允许类成员被外部直接访问。 <br> <div class="blockcode"> <div id="code_VB1"><ol> <li><?php<li>/*<li> * @class Sample<li> * @remark 遍历对象其实只是变量该对象里的一个数组而已;要使得该对象能被遍历,需实现iterator接口<li> */<li>class Sample implements iterator <li>{<li> private $v1 = '123';<li><li> private $v2 = 'abc';<li><li> private $v3 = array( 1, 2, 3 );<li><li> public function rewind() <li> {<li> /*<li> * get_object_vars 该函数查下手册可以看它的功能<li> * 这里把Sample对象实现定义好的属性,而不是动态生成的属性$data合并成一个数组,<li> * 把该组赋值给$data<li> */<li> $this->data = get_object_vars ( $this ); </li> <li> <li> /*</li> <li> * 把iterator接口中的游标指向 $data 的第一个元素</li> <li> */</li> <li> reset( $this->data ); </li> <li> }</li> <li> <li> public function current() { return current( $this->data ); }</li> <li> <li> public function key() { return key( $this->data ); }</li> <li> <li> public function next() { return next( $this->data ); }</li> <li> <li> public function valid() { return ( $this->current() !== false ); }</li> <li> <li>}</li> <li> <li>$s = new Sample();</li> <li> <li>foreach( $s as $k=>$v ){ echo $k.'='.$v.'<br/>';}</li> </ol></div> <em onclick="copycode($('code_VB1'));">复制代码</em> </div> </td></tr></table> <div id="comment_23820" class="cm"> </div> <div id="post_rate_div_23820"></div> <br><br>