1

以下は、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

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 に答える