问题标签 [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.
php - 迭代对象时出现 PHP 5.1.6 ArrayAccess 错误
我必须在 PHP 5.1.6 上开发一个站点,而我刚刚在我的站点中遇到了一个在 5.2+ 上没有发生的错误。使用 foreach() 遍历对象时,出现以下错误:“致命错误:在后/前递增/递减中用作数组的对象必须通过引用返回值...”
有谁知道如何解决这个问题?
php - 带问题的 ArrayAccess 演练
ArrayAccess
我对在 PHP中实现的实现有一些疑问。
这是示例代码:
问题:
- 我不是在问为什么我们必须实现
ArrayAccess
,因为我假设它是 PHP 引擎识别并自动调用实现的继承函数的特殊接口? - 为什么我们要公开实现的功能?因为我假设它们是自动调用的特殊函数。它们不应该是私有的,因为在调用时说
$obj["two"]
函数不是从外部调用的。 __constructor
在函数中分配填充数组是否有特殊原因?这是我知道的构造函数,但在这种情况下它有什么样的帮助。ArrayAccess
和有什么区别ArrayObject
?我在想我通过继承实现的类ArrayAccess
不支持迭代?- 我们如何在不实现的情况下实现对象索引
ArrayAccess
?
谢谢...
php - PHP 5.4 的简化字符串偏移读取
众所周知,PHP 5.4 alpha 已经发布。我对以下内容有疑问。
简化的字符串偏移读取。
$str[1][0]
现在是一个合法的结构。
具体是如何$str[1][0]
工作的?
编辑: http: //php.net/releases/NEWS_5_4_0_alpha1.txt
python - TypeError:“函数”对象在 Python 中是不可订阅的?
我有一个字符串对象数组,带有用于绘制图形的颜色代码,如下所示:colors = ["ob-", "or-", "oy-", "og-", "om-", "op-"]
当我尝试使用 for 循环(其索引小于数组长度)访问它时,我收到以下错误消息: TypeError: 'function' object is unsubscriptable
访问代码如下所示:
我之前打印了颜色,一切看起来都很好,我试图在以前的帖子中检查这个有很多,但我找不到完全正确的解决方案。
那么这可能是什么问题或解决方案呢?
提前谢谢了。
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
,set
和remove
go 而言,它们与ArrayAccess
. 绑定功能是我不知所措的地方,并且开始接受 ArrayAccess 和 PHP 的限制只是禁止这样做。
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()
退货object
和is_array()
退货false
,我使用的是 php 版本 5.3.8
php - 数组访问、迭代器和 current()
我有实现 Countable、ArrayAccess、Iterator 和 Serializable 的类。我有一个数组形式的公共变量 $data。我的迭代实现:
好吧,一切都适用于 foreach 循环,但如果我手动调用current($arrayObject)
,它会返回整个$data
数组,而不是其中的当前数组。我可以current($arrayObject->data)
,但希望尽可能保留原生数组功能。
这是 php 行为对吗?(不是我的代码错误)是否有任何解决方法,没有自定义功能(手指交叉)?
[编辑] 全班的简化版(工作):
php - 使用 SplObjectStorage 作为数据映射,可以使用可变数组作为数据吗?
在以下代码中:
我希望$storage[$fooA]
是1
,它是。我也希望$storage[$fooB]
是array('test')
,但事实并非如此。这也触发了一条通知,上面写着“间接修改 SplObjectStorage 的重载元素对...没有影响”
我认为发生这种情况是因为ArrayAccess
in的实现SplObjectStorage
不会通过引用返回值。
有什么方法可以SplObjectStorage
用作键是对象而值是可变数组的数据映射?做这种工作还有其他可行的选择吗?
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
php - 在实现 ArrayAccess 和 Iterator 的对象上使用 foreach
有没有办法迭代实现 ArrayAccess 和 Iterator 接口的对象键?数组访问是一种魅力,但我不能在那些对我有很大帮助的对象上使用 foreach。可能吗?到目前为止我有这样的代码:
感谢您的任何帮助和提示。