请注意 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