我需要序列化一个代理类。该类使用__set和__get在数组中存储值。我希望序列化看起来像是一个扁平的对象。换句话说,我的班级看起来像:
class Proxy
{
public $data = array();
public function __get($name)
{
return $data[$name]
}
}
我希望foreach循环返回$ data中的所有键和值,当我说:
foreach($myProxy as $key)
这可能吗?
答案 0 :(得分:7)
class Proxy implements IteratorAggregate
{
public $data = array();
public function __get($name)
{
return $data[$name];
}
public function getIterator()
{
$o = new ArrayObject($this->data);
return $o->getIterator();
}
}
$p = new Proxy();
$p->data = array(2, 4, 6);
foreach ($p as $v)
{
echo $v;
}
输出为:246
。
有关详细信息,请参阅PHP文档中的Object Iteration。
答案 1 :(得分:3)
这样的事情:
class Proxy implements Iterator
{
public $data = array();
public function __get($name)
{
return $data[$name]
}
function rewind()
{
reset($this->data);
$this->valid = true;
}
function current()
{
return current($this->data)
}
function key()
{
return key($this->data)
}
function next() {
next($this->data);
}
function valid()
{
return key($this->data) !== null;
}
}