請注意 SplObjectStorage 中一些不一致/令人驚訝的行為,以保持向下相容性。您無法使用鍵/值語法正確地使用 foreach。
<?php
$spl = new SplObjectStorage ();
$keyForA = new StdClass();
$keyForB = new StdClass();
$spl[$keyForA] = 'value a';
$spl[$keyForB] = 'value b';
foreach ($spl as $key => $value)
{
// $key 不是物件,$value 是!
// 必須使用標準陣列存取來獲取字串。
echo $spl[$value] . "\n"; // 輸出 "value a",然後 "value b"
}
// 使用這種形式的 foreach 可能更清楚:
foreach ($spl as $key)
{
// $key 是一個物件。
// 使用標準陣列存取來獲取值。
echo $spl[$key] . "\n"; // 輸出 "value a",然後 "value b"
}
?>
參見 https://bugs.php.net/bug.php?id=49967