- printf: documentation ( source)
<?php
class Item {
private $id;
public function __construct(int $id)
{
$this->id = $id;
}
public function id() : int
{
return $this->id;
}
}
class Items implements IteratorAggregate
{
private $items = [];
public function __construct(Item ...$items)
{
$this->items = $items;
}
public function getIterator() : Generator
{
yield from $this->items;
}
}
class Collection extends IteratorIterator
{
/** @var Items */
public function __construct(Items $items)
{
parent::__construct($items);
}
public function current() : Item
{
return parent::current();
}
}
$items = [];
for ($i=0; $i<10; $i++) {
$items[] = new Item($i);
}
$collection = new Collection(new Items(...$items));
foreach ($collection as $item) {
printf("\tClass: %s. Calling id() method returns %d (%s)\n", get_class($item), $item->id(), gettype($item->id()));
}