遍历对象

PHP 5 提供了一种定义对象的方法使其可以通过单元列表来遍历,例如用 foreach 语句。默认情况下,所有可见属性都将被用于遍历。

Example #1 简单的对象遍历

<?php
class  MyClass
{
    public  $var1  =  ‘value 1‘ ;
    public  $var2  =  ‘value 2‘ ;
    public  $var3  =  ‘value 3‘ ;

protected  $protected  =  ‘protected var‘ ;
    private    $private    =  ‘private var‘ ;

function  iterateVisible () {
       echo  "MyClass::iterateVisible:\n" ;
       foreach( $this  as  $key  =>  $value ) {
           print  " $key  =>  $value \n" ;
       }
    }
}

$class  = new  MyClass ();

foreach( $class  as  $key  =>  $value ) {
    print  " $key  =>  $value \n" ;
}
echo  "\n" ;

$class -> iterateVisible ();

?>

以上例程会输出:

var1 => value 1
var2 => value 2
var3 => value 3MyClass::iterateVisible:
var1 => value 1
var2 => value 2
var3 => value 3
protected => protected var
private => private var

如上所示,foreach 遍历了所有其能够访问的可见属性。

更进一步,可以实现 Iterator 接口。可以让对象自行决定如何遍历以及每次遍历时那些值可用。

Example #2 实现 Iterator 接口的对象遍历

<?php
class  MyIterator  implements  Iterator
{
    private  $var  = array();

public function  __construct ( $array )
    {
        if ( is_array ( $array )) {
             $this -> var  =  $array ;
        }
    }

public function  rewind () {
        echo  "rewinding\n" ;
         reset ( $this -> var );
    }

public function  current () {
         $var  =  current ( $this -> var );
        echo  "current:  $var \n" ;
        return  $var ;
    }

public function  key () {
         $var  =  key ( $this -> var );
        echo  "key:  $var \n" ;
        return  $var ;
    }

public function  next () {
         $var  =  next ( $this -> var );
        echo  "next:  $var \n" ;
        return  $var ;
    }

public function  valid () {
         $var  =  $this -> current () !==  false ;
        echo  "valid:  { $var } \n" ;
        return  $var ;
    }
}

$values  = array( 1 , 2 , 3 );
$it  = new  MyIterator ( $values );

foreach ( $it  as  $a  =>  $b ) {
    print  " $a :  $b \n" ;
}
?>

以上例程会输出:

rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:

可以用 IteratorAggregate 接口以替代实现所有的 Iterator 方法。 IteratorAggregate 只需要实现一个方法 IteratorAggregate::getIterator() ,其应返回一个实现了 Iterator 的类的实例。

Example #3 通过实现 IteratorAggregate 来遍历对象

<?php
class  MyCollection  implements  IteratorAggregate
{
    private  $items  = array();
    private  $count  =  0 ;

// Required definition of interface IteratorAggregate
     public function  getIterator () {
        return new  MyIterator ( $this -> items );
    }

public function  add ( $value ) {
         $this -> items [ $this -> count ++] =  $value ;
    }
}

$coll  = new  MyCollection ();
$coll -> add ( ‘value 1‘ );
$coll -> add ( ‘value 2‘ );
$coll -> add ( ‘value 3‘ );

foreach ( $coll  as  $key  =>  $val ) {
    echo  "key/value: [ $key  ->  $val ]\n\n" ;
}
?>

以上例程会输出:

rewinding
current: value 1
valid: 1
current: value 1
key: 0
key/value: [0 -> value 1]next: value 2
current: value 2
valid: 1
current: value 2
key: 1
key/value: [1 -> value 2]next: value 3
current: value 3
valid: 1
current: value 3
key: 2
key/value: [2 -> value 3]next:
current:
valid:
时间: 2024-12-22 13:57:23

遍历对象的相关文章

cocos JS 几种循环遍历对象的比较

通常我们会用循环的方式来遍历数组.但是循环是 导致js 性能问题的原因之一.一般我们会采用下几种方式来进行数组的遍历: 方式1: for in 循环: var arr = [1,2,3,4,5]; var obj = { a : 1, b : 2, c : 3 }; for( var item in arr|obj ){ fn(item){ // do sth with arr[item]; //do sth wtih obj[item]; }; } 这里的 item: array 的索引值,对

JS完成页面跳转并传参的方法|附加:循环遍历对象

此方法只能传递较少参数 方法如下: <a href='page/index.html'>跳转</a> 以上是正常写法,如果要传参按一下写法: <!--参数写在?后面,多个参数用&隔开,下面传的参数为name=lemon,age=18--> <a href='page/index.html?name=lemon&age=18'></a> 当跳转到页面的时候这个页面的地址栏就会跟你写的那个一样,这时候你只需要获取地址栏的内容并进行采取

js 遍历对象

function allPrpos(obj) { // 用来保存所有的属性名称和值 var props = ""; // 开始遍历 for(var p in obj){ // 方法 if(typeof(obj[p])=="function"){ obj[p](); }else{ // p 为属性名称,obj[p]为对应属性的值 props+= p + "=" + obj[p]+"<br />"; } } // 最后

for/in 循环遍历对象的属性

for/in 语句循环遍历对象的属性. js中获取key得到某对象中相对应的value的方法:obj.key js中根据动态key得到某对象中相对应的value的方法有二: 一.var key = "name1";var value = obj[key]; 二.var key = "name1";var value = eval("obj."+key); JS代码: var obj={"name":"wjy"

遍历对象的可枚举属性

// 遍历对象的可枚举属性 var obj = { name:'Nicholas', job:'engineer' }; Object.getPrototypeOf(obj).age = 33; //1.for-in for (var property in obj) { console.log('Name:' + property); console.log('Value:' + obj[property]); } //2.Object.keys() var properties = Obje

遍历对象属性(for in、Object.keys、Object.getOwnProperty)

js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性.继承自原型的属性 var obj = {"name":"Poly", "career":"it"} Object.defineProperty(obj, "age", {value:"forever

ES6之6种遍历对象属性的方法

1.for ... in 循环遍历对象自身的和继承的可枚举属性(不含Symbol属性). 2.Obejct.keys(obj),返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性). 3.Object.getOwnPropertyNames(obj),返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性). 4.Object.getOwnPropertySymbols(obj),返回一个数组,包含对象自身的所有Symbol属性. 5.Ref

javaScript遍历对象、数组总结

javaScript遍历对象总结 1.使用Object.keys()遍历 var obj = {'0':'a','1':'b','2':'c'}; Object.keys(obj).forEach(function(key){ console.log(key,obj[key]); }); 2.使用for..in..遍历 var obj = {'0':'a','1':'b','2':'c'}; for(var i in obj) { console.log(i,":",obj[i]);

javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象

对象字面量  JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay":value 对象字面2??定义方法和json很像,只有一点不同,json的key 必须加"" : 对象,数组也可以作为键值 JSON的组成 Javascript Object Notation 对象字面量的一种表现形式 : 键名必须有双引号""包围 : 为什么用J