PHP Conference Japan 2024

ArrayObject::offsetGet

(PHP 5, PHP 7, PHP 8)

ArrayObject::offsetGet返回指定索引处的数值

描述

public ArrayObject::offsetGet(混合 $key): 混合

参数

key

包含值的索引。

返回值

指定索引处的数值或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
17 年前
如果您正在重载 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 迭代对象,则不会调用此方法。相反,将调用迭代器的 current() 方法。
To Top