2012-08-16 9 views
11

La documentazione di PHP non è molto esplicito e afferma soltanto che:Qual è la differenza tra SplObjectStorage :: contiene e SplObjectStorage :: offsetExists?

SplObjectStorage :: offsetExistsVerifica se esiste un oggetto nella memoria. (PHP> = 5.3.0)

SplObjectStorage :: contieneVerifica se la memoria contiene l'oggetto fornito. (PHP> = 5.1.0)

Quale praticamente sembra la stessa cosa per me.

DOMANDA: A parte l'offset, essendo disponibili solo in 5.3.0, qual è la differenza tra il 2?


piccolo test che ho condotto ...

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

uscita:

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 

risposta

12

Sono entrambi esattamente lo stesso.

offsetExists viene definito come un metodo alias di contains ed è inclusa semplicemente per conformità con l'interfaccia ArrayAccess.

È possibile see for yourself in the source che venga utilizzato SPL_MA (alias metodo) e che siano stati configurati anche un paio di altri alias.

  • offsetExists = contiene
  • offsetSet = Allega
  • offsetUnset = staccare
+0

Grazie per immersione nella sorgente. – PeeHaa

+0

Grande, grazie mille! – Tivie

Problemi correlati