13

PHPのドキュメントはあまり明確ではなく、次のように述べているだけです。

SplObjectStorage::offsetExists オブジェクトがストレージに存在するかどうかを確認します。(PHP> = 5.3.0)

SplObjectStorage::contains ストレージに提供されたオブジェクトが含まれているかどうかを確認します。(PHP> = 5.1.0)

これは私にはほとんど同じように思えます。

質問: offsetExistsが5.3.0でのみ利用可能であることを除けば、2つの違いは何ですか?


私が行った小さなテスト...

$s = new SplObjectStorage();
$o1 = new StdClass();
$o2 = new StdClass();
$o3 = "I'm not an object!";
$s->attach($o1);

var_dump($s->contains($o1));
var_dump($s->offsetExists($o1));
echo '<br>';
var_dump($s->contains($o2));
var_dump($s->offsetExists($o2));
echo '<br>';
var_dump($s->contains($o3));
var_dump($s->offsetExists($o3));

出力:

boolean true
boolean true

boolean false
boolean false

Warning: SplObjectStorage::contains() expects parameter 1 to be object, string given in index.php on line 15
null

Warning: SplObjectStorage::offsetExists() expects parameter 1 to be object, string given in index.php on line 16
null
4

1 に答える 1

14

どちらもまったく同じです。

offsetExistsのメソッド エイリアスとして定義され、contains単にインターフェイスに準拠するために含まれていArrayAccessます。

ソースSPL_MA(メソッド エイリアス) が使用されていることと、他にもいくつかのエイリアスが設定されていることがわかります。

  • offsetExists = 含む
  • offsetSet = アタッチ
  • offsetUnset = デタッチ
于 2012-08-16T08:23:11.617 に答える