Php 动态代理类魔术方法的自定义foreach结果?
我需要序列化一个代理类。该类使用_set和_get将值存储在数组中。我希望序列化看起来像是一个平面对象。换句话说,我的班级看起来像:Php 动态代理类魔术方法的自定义foreach结果?,php,serialization,proxy,foreach,Php,Serialization,Proxy,Foreach,我需要序列化一个代理类。该类使用_set和_get将值存储在数组中。我希望序列化看起来像是一个平面对象。换句话说,我的班级看起来像: class Proxy { public $data = array(); public function __get($name) { return $data[$name] } } 我希望foreach循环返回$data中的所有键和值,当我说: foreach($myProxy as $key) 这可能吗
class Proxy
{
public $data = array();
public function __get($name)
{
return $data[$name]
}
}
我希望foreach循环返回$data中的所有键和值,当我说:
foreach($myProxy as $key)
这可能吗?您想实现 大概是这样的:
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;
}
}
输出为:246
有关更多详细信息,请参阅PHP文档中的。我无法控制将进行迭代的代码。这是一个第三方库,我希望我的代理能够很好地使用它。它使用foreach。我是否正确地假设实现接口需要迭代的人使用接口函数,或者它在幕后发挥了一些神奇的作用?迭代器接口是神奇的,它允许您在对象上使用foreach()
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;
}