以下是来自php.net的splobjectstorage文档的example2。 使用$ s [$ o1]和$ s [$ o2]的行是我不熟悉的语法,还没有看过对象(仍在学习)
这是从一个对象获取属性的标准方法吗?这个对象可以用于我创建的任何类吗?
这是使用魔术方法还是其他编程功能来为这个类创建这种语法吗?
<?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]);
}
?>
答案 0 :(得分:2)
“方括号”[ ]
语法是使用SplObjectStorage
作为数据映射的示例。意思是key->value store
。
SplObjectStorage中元素($o1
,$o2
)的“键”实际上是对象的哈希值。这使得无法将相同对象实例的多个副本添加到SplObjectStorage,因此您无需在添加之前检查副本是否已存在。
$o1
,$o2
可以是您创建的任何自定义PHP类。 SplObjectStorage将负责数据映射。
通常,这种'方括号'语法不与PHP中的对象一起使用。它仅用于数组。
使用对象时,请使用$object->property
或$object->function()
语法。
提供者:
答案 1 :(得分:1)
您可以对数组和使用方括号语法来实现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。