2012-08-16 17 views
11

La documentación de PHP no es muy explícita y sólo establece que:¿Cuál es la diferencia entre SplObjectStorage :: contains y SplObjectStorage :: offsetExists?

SplObjectStorage :: offsetExistsComprueba si existe un objeto en el almacenamiento. (PHP> = 5.3.0)

SplObjectStorage :: contieneComprueba si el almacenamiento contiene el objeto proporcionado. (PHP> = 5.1.0)

Lo cual me parece lo mismo.

PREGUNTA: Aparte de offsetExists solo disponible en 5.3.0, ¿cuál es la diferencia entre los 2?


pequeña prueba que realicé ...

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

de salida:

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 

Respuesta

12

Ambos son exactamente lo mismo.

offsetExists se define como un alias método de contains y se incluye simplemente para el cumplimiento de la interfaz de ArrayAccess.

Puede see for yourself in the source que se usa SPL_MA (alias del método), y también que hay un par de otros alias configurados.

  • offsetExists = contiene
  • offsetSet = adjuntar
  • offsetUnset = separar
+0

Gracias para sumergirse en la fuente. – PeeHaa

+0

Genial, muchas gracias! – Tivie

Cuestiones relacionadas