1

以下是 php.net 的 splobjectstorage 文档中的示例 2。使用 $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

4

2 回答 2

2

“方括号”[ ]语法是SplObjectStorage用作数据映射的示例。意味着,作为key->value store.

SplObjectStorage 中元素 ( $o1, $o2) 的“键”实际上是对象的散列。这使得,不可能将同一对象实例的多个副本添加到 SplObjectStorage,因此您不必在添加之前检查副本是否已经存在。

$o1,$o2可以是您创建的任何自定义 PHP 类。SplObjectStorage 将负责数据映射。

通常,这种“方括号”语法不与 PHP 中的对象一起使用。它仅与数组一起使用。

处理对象时,使用$object->property or$object->function()语法。

礼貌:

于 2013-01-21T18:19:59.860 回答
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

于 2013-01-22T14:44:40.627 回答