龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 使你的PHP对象可被foreach,属性用Private修饰的

时间:2014-07-23 16:02来源:网络整理 作者:网络 点击:
分享到:
使你的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
精彩图集

赞助商链接