ArrayAccess / ArrayObject不能与call_user_func_array()等函数一起使用

时间:2012-10-30 14:00:30

标签: php magic-methods arrayaccess

使用ArrayAccessArrayObject实现对象时,对于某些操作,它是一个完全正常的数组(例如foreach()语句)。然而,其他人并没有那么容易被愚弄,仍然抱怨它是一个对象:

[E_WARNING] call_user_func_array() expects parameter 2 to be array, object given

这让我感到无所适从。有人可以解释这背后的原因吗?有没有解决的办法?

我需要这个来支持后端代码。它需要一个数组(作为参数传递给call_user_func_array()),有时会修改它。我需要将对数组所做的任何更改镜像到新变量,这就是为什么我尝试通过ArrayAccess对象进行操作(更多信息here)。

2 个答案:

答案 0 :(得分:1)

Thye函数名称非常明确,description in the documents表示它需要数组的原因

解决方案是将对象包装在数组

call_user_func_array('callback', array( $myObject));

答案 1 :(得分:0)

一般来说,你不能使用ArrayObjectArrayAccess实现者​​与在数组上运行的本机函数。您可以将它们与通常使用数组表示法进行遍历的语言结构一起使用,而不是。