代码
class Composite
{
private $a;
private $b;
/**
*
* @return the $a
*/
public function getA()
{
return $this->a;
}
/**
*
* @return the $b
*/
public function getB()
{
return $this->b;
}
/**
*
* @param field_type $a
*/
public function setA($a)
{
$this->a = $a;
}
/**
*
* @param field_type $b
*/
public function setB($b)
{
$this->b = $b;
}
}
$composite = new Composite();
$composite->setA(1);
$composite->setB(new Composite());
$composite->getB()->setA(2);
$composite->getB()->setB(3);
$x = new \Zend\Hydrator\ClassMethods();
print_r($x->extract($composite));
输出
Array
(
[a] => 1
[b] => Composite Object
(
[a:Composite:private] => 2
[b:Composite:private] => 3
)
)
问题
我的目标是从一个数组可以递归的对象中生成一个数组。Zend 提供了一个 hydrator,它可以提取对象属性并将它们放入数组中。但它只在第一级这样做并且它不会进一步递归(即当我希望将它们变成一个数组时,它保留了上面的私有成员)。
有没有办法从这样的对象中生成一个数组?注意:我有不同的对象作为私有成员,它们与这个简化示例中的对象不同。
有问题的 Hydrator 不会继续递归地提取私有对象属性。
我会接受其他不使用 Hydrator 的答案,只要它们相当优雅,但如果\Zend\Hydrator
出现使用的答案,我会接受那个答案。