Nomármost: a PHP5 egyik hasznos újítása az, hogy az Iterator interfészen keresztül minden objektum (osztálypéldány) használható tömbként is – ennek leginkább a foreach ciklus alkalmazása során láthatjuk hasznát. Például így:

class TestClass
{
	private $data = array('egy' => 'alma', 'kettő' => 'körte', 'három' => 'szőlő', 'négy' => 'barack');

	// Az Iterator interfész implementációja
	public function rewind() { 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 ); }
}

$instance = new TestClass;

// És itt jön a trükk
foreach($instance as $key => $value)
{
	echo "$key => $value\n";
}
...És a kimenet pedig várhatóan az lesz, hogy:
egy => alma
kettő => körte
három => szőlő
négy => barack

Viszont nem kerül túl sok munkába írni egy függvényt, ami a Zend2-motor helyett a régi változatban (tehát a PHP4-ben) is elvégzi a tömbbé alakítás feladatát, valahogy így:

function ObjectIterator(&$object)
{
	$retval = array();
	$object->rewind();
	do
	{
		$retval[$object->key()] = $object->current();
	}
	while($object->next());

	return $retval;
}

Tehát az ObjectIterator függvénynek egy olyan osztály egy példányát kell átadni, ami "implementálja" az Iterator interfészt. (Idézőjelbe tettem az implementálni igét, lévén hogy PHP4-ben még nem létezik az implements kulcsszó.) A technika gyakorlatban így hasznosítható:

class TestClass
{
	var $data = array('egy' => 'alma', 'kettő' => 'körte', 'három' => 'szőlő', 'négy' => 'barack');

	function rewind() { reset($this->data); }
	function current() { return current($this->data); }
	function key() { return key($this->data); }
	function next() { return next($this->data); }
	function valid() { return ( $this->current() !== false ); }
}


function ObjectIterator(&$object)
{
	$retval = array();
	$object->rewind();
	do
	{
		$retval[$object->key()] = $object->current();
	}
	while($item = $object->next());

	return $retval;
}

$instance = new TestClass;

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

Tehát mielőtt az objektumot a foreach-be dobnánk, köré rakjuk az ObjectIterator függvényt, ami elvégzi a piszkos munkát. Ugyan gyorsaság szempontjából úgy sejtem, hogy ez a megoldás nem teljesítene jól, mégis több mint a semmi: egy olyan hasznos technikát ad a programozó kezébe, amit az joggal hiányolhat a PHP4-ből.

Köszönet az ihletért az IBM cikkének. (Via Weblabor.)