splobjectstorage的语法会发生什么?

时间:2013-01-21 16:09:32

标签: php

以下是来自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]);
}
?>

http://php.net/manual/en/class.splobjectstorage.php

2 个答案:

答案 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