2012-08-16 17 views
11

Dokumentacja PHP nie jest bardzo wyraźny, a jedynie stwierdza, że:Jaka jest różnica między obiektami SplObjectStorage :: contains i SplObjectStorage :: offsetExists?

SplObjectStorage :: offsetExistsSprawdza, czy obiekt istnieje w pamięci. (PHP> = 5.3.0)

SplObjectStorage :: zawierasprawdza czy Pamięć zawiera przedmiotu zaopatrzonego. (PHP> = 5.1.0)

Co właściwie wydaje mi się takie samo.

PYTANIE: Jaka jest różnica między 2 ?, poza offsetExists, które są dostępne tylko w wersji 5.3.0.


małe testy przeprowadziłem ...

$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)); 

wyjściowa:

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 

Odpowiedz

12

Oboje są dokładnie takie same.

offsetExists jest zdefiniowany jako metodą alias z contains i znajduje się tylko na zgodność z interfejsem ArrayAccess.

Możesz użyć see for yourself in the source, że używany jest SPL_MA (alias metody), a także, że jest skonfigurowanych kilka innych aliasów.

  • offsetExists = zawiera
  • offsetSet = dołączyć
  • offsetUnset = odłączyć
+0

Dzięki za nurkowanie w źródle. – PeeHaa

+0

Świetnie, wielkie dzięki! – Tivie

Powiązane problemy