问题标签 [arrayaccess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
474 浏览

php - 迭代对象时出现 PHP 5.1.6 ArrayAccess 错误

我必须在 PHP 5.1.6 上开发一个站点,而我刚刚在我的站点中遇到了一个在 5.2+ 上没有发生的错误。使用 foreach() 遍历对象时,出现以下错误:“致命错误:在后/前递增/递减中用作数组的对象必须通过引用返回值...”

有谁知道如何解决这个问题?

0 投票
1 回答
219 浏览

php - 带问题的 ArrayAccess 演练

ArrayAccess我对在 PHP中实现的实现有一些疑问。

这是示例代码:

问题:

  1. 我不是在问为什么我们必须实现ArrayAccess,因为我假设它是 PHP 引擎识别并自动调用实现的继承函数的特殊接口?
  2. 为什么我们要公开实现的功能?因为我假设它们是自动调用的特殊函数。它们不应该是私有的,因为在调用时说$obj["two"]函数不是从外部调用的。
  3. __constructor在函数中分配填充数组是否有特殊原因?这是我知道的构造函数,但在这种情况下它有什么样的帮助。
  4. ArrayAccess和有什么区别ArrayObject?我在想我通过继承实现的类ArrayAccess不支持迭代?
  5. 我们如何在不实现的情况下实现对象索引ArrayAccess

谢谢...

0 投票
3 回答
1210 浏览

php - PHP 5.4 的简化字符串偏移读取

众所周知,PHP 5.4 alpha 已经发布。我对以下内容有疑问。

简化的字符串偏移读取。 $str[1][0]现在是一个合法的结构。

具体是如何$str[1][0]工作的?

编辑: http: //php.net/releases/NEWS_5_4_0_alpha1.txt

0 投票
1 回答
1602 浏览

python - TypeError:“函数”对象在 Python 中是不可订阅的?

我有一个字符串对象数组,带有用于绘制图形的颜色代码,如下所示:colors = ["ob-", "or-", "oy-", "og-", "om-", "op-"]

当我尝试使用 for 循环(其索引小于数组长度)访问它时,我收到以下错误消息: TypeError: 'function' object is unsubscriptable

访问代码如下所示:

我之前打印了颜色,一切看起来都很好,我试图在以前的帖子中检查这个有很多,但我找不到完全正确的解决方案。

那么这可能是什么问题或解决方案呢?

提前谢谢了。

0 投票
2 回答
2218 浏览

php - PHP中的ArrayAccess——通过引用分配给偏移量

首先,引用 ole' 手册ArrayAccess::offsetSet()

此函数不会在通过引用分配和对ArrayAccess重载的数组维度的其他间接更改中调用(间接的意思是它们不是通过直接更改维度,而是通过更改子维度或子属性或分配数组维度通过引用另一个变量)。而是调用 ArrayAccess::offsetGet()。只有当该方法通过引用返回时,该操作才会成功,这只能从 PHP 5.3.4 开始

我对此有点困惑。似乎这表明(从 5.3.4 开始)可以定义offsetGet()为在实现类中通过引用返回,从而通过引用处理分配。

所以,现在是一个测试片段:

忽略没有验证和isset()检查

好的,所以这不起作用。那么这个手册说明是指什么?

原因
我想允许通过数组运算符通过引用分配给实现的对象ArrayAccess,如示例片段所示。我以前对此进行过调查,但我认为这是不可能的,但由于不确定性而回到这一点,我(重新)在手册中发现了这一点。现在我很困惑。


更新:当我点击Post Your Question时,我意识到这可能只是通过引用另一个变量来引用赋值,例如$bar = &$test['foo'];. 如果是这样,那么道歉;尽管如果可能的话,知道如何通过引用重载对象进行分配会很棒。


进一步阐述:归根结底,我想要以下方法别名:

has, get,setremovego 而言,它们与ArrayAccess. 绑定功能是我不知所措的地方,并且开始接受 ArrayAccess 和 PHP 的限制只是禁止这样做。

0 投票
1 回答
2749 浏览

php - Arrayaccess 和原生 php 数组函数

有什么方法可以使用array_merge(), array_pop(), .. 函数来处理 ArrayAccess?

从现在开始,我尝试了Iterate界面和__set_state()魔术方法,但没有成功。

给出的错误:array_replace_recursive() [<a href='function.array-replace-recursive'>function.array-replace-recursive</a>]: Argument #1 is not an array

只是记录,gettype()退货objectis_array()退货false,我使用的是 php 版本 5.3.8

0 投票
1 回答
1623 浏览

php - 数组访问、迭代器和 current()

我有实现 Countable、ArrayAccess、Iterator 和 Serializable 的类。我有一个数组形式的公共变量 $data。我的迭代实现:

好吧,一切都适用于 foreach 循环,但如果我手动调用current($arrayObject),它会返回整个$data数组,而不是其中的当前数组。我可以current($arrayObject->data),但希望尽可能保留原生数组功能。

这是 php 行为对吗?(不是我的代码错误)是否有任何解决方法,没有自定义功能(手指交叉)?

[编辑] 全班的简化版(工作):

0 投票
1 回答
1619 浏览

php - 使用 SplObjectStorage 作为数据映射,可以使用可变数组作为数据吗?

在以下代码中:

我希望$storage[$fooA]1,它是。我也希望$storage[$fooB]array('test'),但事实并非如此。这也触发了一条通知,上面写着“间接修改 SplObjectStorage 的重载元素对...没有影响”

我认为发生这种情况是因为ArrayAccessin的实现SplObjectStorage不会通过引用返回值。

有什么方法可以SplObjectStorage用作键是对象而值是可变数组的数据映射?做这种工作还有其他可行的选择吗?

0 投票
3 回答
6852 浏览

php - array_values doesn't work with ArrayAccess object

array_values() doesn't work with ArrayAccess object. neither does array_keys()

why?

if I can access $object['key'] I should be able to do all kind of array operations

0 投票
2 回答
5672 浏览

php - 在实现 ArrayAccess 和 Iterator 的对象上使用 foreach

有没有办法迭代实现 ArrayAccess 和 Iterator 接口的对象键?数组访问是一种魅力,但我不能在那些对我有很大帮助的对象上使用 foreach。可能吗?到目前为止我有这样的代码:

感谢您的任何帮助和提示。