2012-08-16 91 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