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 開發者 *確實* 在 2013 年修復了 Sam 評論中提出的問題(根據此處連結中的評論串: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