2012-08-16 89 views
11

PHP文档也不是很明确,只是说:SplObjectStorage :: contains和SplObjectStorage :: offsetExists有什么区别?

在存储SplObjectStorage :: offsetExists检查是否有物体存在。(PHP> = 5.3.0)

SplObjectStorage ::包含如果存储包含所提供的对象检查。(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 

回答

12

他们都是一模一样的。

offsetExists被定义为方法别名contains并包括简单地对符合的ArrayAccess接口。

您可以使用see for yourself in the sourceSPL_MA(方法别名)正在使用,并且还有一些其他别名已设置。

  • offsetExists =包含
  • offsetSet =附上
  • offsetUnset =分离
+0

感谢潜水到源。 – PeeHaa 2012-08-16 08:23:48

+0

太好了,非常感谢! – Tivie 2012-08-16 11:16:17