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
精彩图集
精彩文章