ArrayObject::offsetGet

(PHP 5, PHP 7, PHP 8)

ArrayObject::offsetGet返回指定索引处的 value

说明

public ArrayObject::offsetGet(mixed $key): mixed

参数

key

具有 value 的索引。

返回值

指定索引处的 value 或 null

错误/异常

当指定的索引不存在时,会产生 E_NOTICE 错误消息。

范例

范例 #1 ArrayObject::offsetGet() 范例

<?php
$arrayobj
= new ArrayObject(array('zero', 7, 'example'=>'e.g.'));
var_dump($arrayobj->offsetGet(1));
var_dump($arrayobj->offsetGet('example'));
var_dump($arrayobj->offsetExists('notfound'));
?>

上面的例子将输出

int(7)
string(4) "e.g."
bool(false)

添加注释

用户贡献的注释 3 个注释

Jason
8 年前
值得注意的是,PHP 开发人员 *确实* 修复了 Sam 在 2013 年提到的问题(根据他在这里的评论线程:https://bugs.php.net/bug.php?id=34783#1366088374),至少从 PHP 5.3.8 开始。

因此,您 *可以*(并且在大多数情况下应该)使用引用语法重载 offsetGet 以获得预期功能

<?php
class myArrayType extends ArrayAccess {

public function &
offsetGet($index) {
// ...
}

}
?>
Sam
16 年前
如果您正在重载 ArrayObject,值得注意的是,当此方法(由父类实现)返回引用时,类似 $fakeArray['foobar']['hello'] = 1; 的代码将按您的预期工作。

但是,当您重载 offsetGet 方法时,您 *不能* 将其定义为 &offsetGet,因此上面的代码会失败(因为它在您实际使用它之前返回了 'foobar' 变量)。

这是开发人员在 5.0 和 5.1 之间破坏的东西,并且被关闭为虚假问题(http://bugs.php.net/bug.php?id=34783)。所以这不是什么大问题、问题或请求,只是值得注意的东西。
Alex Andrienko
15 年前
关于 offsetGet() 方法重载,请注意,如果您通过 foreach 迭代 Object,此方法不会被调用。取而代之的是 Iterator 的 current() 方法会被调用。
To Top