SPL对象存储的语法会发生什么


what happens in syntax of splobjectstorage?

下面是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。