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
答案 0 :(得分:12)
它们都完全一样。
offsetExists
被定义为contains
的方法别名,仅用于符合ArrayAccess
界面。
您可以see for yourself in the source使用SPL_MA
(方法别名),还可以设置其他几个别名。