簡體   English   中英

SplObjectStorage :: contains和SplObjectStorage :: offsetExists有什么區別?

[英]What is the difference between SplObjectStorage::contains and SplObjectStorage::offsetExists?

PHP文檔不是很明確,只說明:

SplObjectStorage :: offsetExists 檢查存儲中是否存在對象。 (PHP> = 5.3.0)

SplObjectStorage :: contains 檢查存儲是否包含提供的對象。 (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

它們都完全一樣。

offsetExists被定義為contains方法別名 ,僅為了符合ArrayAccess接口而contains在內。

您可以在源SPL_MA正在使用SPL_MA (方法別名),以及還有其他幾個別名設置。

  • offsetExists =包含
  • offsetSet = attach
  • offsetUnset = detach

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM