Webhosting and cheap domain registration services
  

 Home

PHP Manual
PrevChapter 18. Classes and Objects (PHP 5)Next

Object Iteration

PHP 5 provides a way for objects to be defined so it is possible to iterate through a list of items, with, for example a the Section called foreach in Chapter 15 statement. By default, all public properties will be used for the iteration.

Example 18-18. Simple Object Iteration

<?php

class MyClass {
  
public $var1 = 'value 1';
  
public $var2 = 'value 2';
  
public $var3 = 'value 3';

  
protected $protected = 'protected';
  
private   $private   = 'private';

}

$class = new MyClass();

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

Will output:

var1 => value 1
var2 => value 2
var3 => value 3

As the output shows, the the Section called foreach in Chapter 15 iterated through each public variable that is defined. To take it a step further you can implement one of PHP 5's internal the Section called Object Interfaces named Iterator. This allows the object to decide what and how the object will be iterated.

Example 18-19. Object Iteration implementing 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";
}

Will output:

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:

You can also define your class so that it doesn't have to define all the Iterator functions by simply implementing the PHP 5 IteratorAggregate interface.

Example 18-20. Object Iteration implementing 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";
}

?>
</pre>

Will output:

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:

PrevHomeNext
OverloadingUpMagic Methods

 

  

 

 

 Network sites:

Domain registration : Domain registration and domain name transfer services
Cheap Domain Registrar : Cheap domains or register domain name from $5.95
 

Disclaimer: This documentation is provided only for the benefits of our hosting customers.
For authoritative source of the documentation, please refer to http://www.php.net/docs.php