【发布时间】:2013-04-18 18:18:45
【问题描述】:
大家好,我有一个方法应该回调并递归地将 Arrayobject 转换为关联数组,不幸的是我遇到了一个致命错误
PHP Fatal error: Call to undefined method ArrayObject::toArray()
这是我的方法
/**
* Take an ArrayObject and recursively turn it into an array
*
* @param bool $recursion
*
* @return array
*/
public function toArray($recursion = false)
{
// just in case the object might be multidimensional
if (true === $this->object) return $this->object->getArrayCopy();
return array_map( function($item)
{
return is_object($item) ? $item->toArray(true) : $item;
}, $this->object->getArrayCopy() );
}
这是一个示例ArrayObject
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[profile] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[list] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[location] =>
[network_name] =>
[interests] =>
[last_name] =>
[url] =>
[significant_other] =>
[network_domains] =>
[contact] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[im] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[provider] =>
)
)
[email_addresses] =>
)
)
)
)
)
)
[messages] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[list] => Array
(
[0] => foo
[1] => bar
[2] => baz
)
)
)
[groups] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
)
)
[users] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
)
)
)
)
【问题讨论】:
-
在哪里以及如何调用函数 toArray 函数。
-
在另一个类中,我正在实例化我的解析器,解析输入,将该值分配给
$this->object,然后运行$foo = $bar->toArray()。实例化和利用公共方法调用的典型方式。 -
尝试将函数名replace toArray() 更改为其他。第二件事是,作为错误,您正在创建解析器的对象。您正在通过数组对象调用函数。重新检查您的代码。
-
创建回调的目的是让它递归,将回调的名称更改为
getArrayCopy()。使用getArrayCopy()而不是$this->toArray()会破坏递归功能,并且只对对象的顶层进行操作。 -
不要使用 getArrayCopy() 名称。我是说用任何其他名称替换。
标签: php oop recursion callback arrayobject