2012-08-16 15 views
11

Die PHP-Dokumentation ist nicht sehr explizit und besagt nur, dass:Was ist der Unterschied zwischen SplObjectStorage :: contains und SplObjectStorage :: offsetExists?

SplObjectStorage :: offsetExistsüberprüft, ob ein Objekt im Speicher vorhanden ist. (PHP> = 5.3.0)

SplObjectStorage :: enthältPrüft, ob die Speicher enthält das Objekt vorgesehen. (PHP> = 5.1.0)

Das scheint mir ziemlich das Gleiche zu sein.

FRAGE: Abgesehen von OffsetExists nur in 5.3.0 verfügbar ist, was ist der Unterschied zwischen den 2?


kleiner Test I durchgeführt ...

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

Ausgang:

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 

Antwort

12

Sie sind beide genau das gleiche.

offsetExists als Verfahren alias von contains definiert und wird einfach mit den für die Einhaltung ArrayAccess Schnittstelle enthalten.

Sie können see for yourself in the source dass SPL_MA (Methode Alias) verwendet wird, und auch, dass es noch ein paar andere Aliase sind eingerichtet.

  • offsetExists enthält =
  • offsetSet =
  • befestigen offsetUnset = lösen
+0

Dank für das Tauchen in die Quelle. – PeeHaa

+0

Großartig, vielen Dank! – Tivie