【问题标题】:ArrayAccess/ArrayObject do not work with functions like call_user_func_array() [closed]ArrayAccess/ArrayObject 不适用于 call_user_func_array() 等函数 [关闭]
【发布时间】:2012-10-19 21:22:39
【问题描述】:

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

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

这让我觉得前后矛盾。有人可以解释这背后的原因吗?有没有解决的办法?

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

【问题讨论】:

  • 因过于本地化而关闭?强烈反对。

标签: php magic-methods arrayaccess


【解决方案1】:

你的函数名非常明确,description in the documents 表明它为什么需要一个数组

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

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

【讨论】:

  • 好的,我明白了。但是为什么foreachcount() 能够适应ArrayObject 而不是数组,而其他功能却不行呢?还是觉得不一致。
  • 因为ArrayObject 实现了TraversableCountable 接口,这是foreachcount() 需要的。
  • 好点。很遗憾没有支持某种__toArray() 方法的接口:*(我会接受你的回答,因为这条评论回答了我的问题。谢谢!
【解决方案2】:

一般来说,您不能将ArrayObjectArrayAccess 实现器与操作数组的本机函数一起使用。您可以将它们与通常使用数组表示法进行遍历的语言结构一起使用。

【讨论】:

  • 是的...array_keysarray_valuesarray_map 等。
猜你喜欢
  • 2012-03-30
  • 1970-01-01
  • 2013-12-28
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多