下面是php.net的splobjectstorage文档中的示例2。使用 $s[$o 1] 和 $s[$o 2] 的行是我不熟悉的语法,并且还没有看到对象(仍在学习)
这是从适用于我创建的任何类的对象中获取属性的标准方法吗?
这是使用魔术方法还是其他编程功能来仅为此类创建此语法?
<?php
// As a map from objects to data
$s = new SplObjectStorage();
$o1 = new StdClass;
$o2 = new StdClass;
$o3 = new StdClass;
$s[$o1] = "data for object 1";
$s[$o2] = array(1,2,3);
if (isset($s[$o2])) {
var_dump($s[$o2]);
}
?>
http://php.net/manual/en/class.splobjectstorage.php
语法
[ ]
"方括号"是使用 SplObjectStorage
作为数据映射的示例。意味着,作为key->value store
.
SplObjectStorage中元素($o1
,$o2
)的"键"实际上是对象的哈希。因此,无法将同一对象实例的多个副本添加到 SplObjectStorage,因此您不必在添加之前检查副本是否已存在。
$o1
,$o2
可以是你创建的任何自定义 PHP 类。SplObjectStorage将负责数据映射。
通常,这种"方括号"语法不用于 PHP 中的对象。它仅用于数组。
使用对象时,请使用$object->property
或$object->function()
语法。
礼貌:
- http://php.net/manual/en/class.splobjectstorage.php
- 关联阵列与 SplObjectStorage
您可以对数组和实现 ArrayAccess
接口的所有类使用方括号语法(SplObjectStorage
这样做)。
例:
class MyObjectStorage implements ArrayAccess {
public function offsetExists($offset) {}
public function offsetSet($offset, $value) {
echo "Set $offset to $value.";
}
public function offsetGet($offset) {
echo "Get $offset.";
}
public function offsetUnset($offset) {}
}
$list = new MyObjectStorage();
$list['foo'] = 'bar'; // prints "Set foo to bar.";
有关详细信息,请参阅 http://php.net/ArrayAccess。