预定义接口
在线手册:中文  英文

IteratorAggregate(聚合式迭代器)接口

(No version information available, might only be in SVN)

简介

创建外部迭代器的接口。

接口摘要

IteratorAggregate extends Traversable {
/* 方法 */
abstract public Traversable getIterator ( void )
}

Example #1 基本用法

<?php
class myData implements IteratorAggregate {
    public 
$property1 "Public property one";
    public 
$property2 "Public property two";
    public 
$property3 "Public property three";

    public function 
__construct() {
        
$this->property4 "last property";
    }

    public function 
getIterator() {
        return new 
ArrayIterator($this);
    }
}

$obj = new myData;

foreach(
$obj as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

以上例程的输出类似于:

string(9) "property1"
string(19) "Public property one"

string(9) "property2"
string(19) "Public property two"

string(9) "property3"
string(21) "Public property three"

string(9) "property4"
string(13) "last property"

Table of Contents


预定义接口
在线手册:中文  英文

用户评论:

Lubaev.K (2013-06-16 11:49:00)

<?php
// IteratorAggregate
// Create indexed and associative arrays.

class myData implements IteratorAggregate {

    private 
$array = [];
    const 
TYPE_INDEXED 1;
    const 
TYPE_ASSOCIATIVE 2;

    public function 
__construct( array $data$type self::TYPE_INDEXED ) {
        
reset($data);
        while( list(
$k$v) = each($data) ) {
            
$type == self::TYPE_INDEXED ?
            
$this->array[] = $v :
            
$this->array[$k] = $v;
        }
    }

    public function 
getIterator() {
        return new 
ArrayIterator($this->array);
    }

}

$obj = new myData(['one'=>'php','javascript','three'=>'c#','java',], /*TYPE 1 or 2*/ );

foreach(
$obj as $key => $value) {
    
var_dump($key$value);
    echo 
PHP_EOL;
}

// if TYPE == 1
#int(0)
#string(3) "php"
#int(1)
#string(10) "javascript"
#int(2)
#string(2) "c#"
#int(3)
#string(4) "java"

// if TYPE == 2
#string(3) "one"
#string(3) "php"
#int(0)
#string(10) "javascript"
#string(5) "three"
#string(2) "c#"
#int(1)
#string(4) "java"
?>

Good luck!

Tab Atkins (2012-04-29 02:11:27)

Note that, at least as of 5.3, you still aren't allowed to return a normal Array from getIterator().
In some places, the docs wrap the array into an ArrayObject and return that. DON'T DO IT. ArrayObject drops any empty-string keys on the floor when you iterate over it (again, at least as of 5.3).
Use ArrayIterator instead. I wouldn't be surprised if it didn't have its own set of wonderful bugs, but at the very least it works correctly when you use it with this method.

易百教程