В чем разница между SplObjectStorage::contains и SplObjectStorage::offsetExists?

Документация PHP не очень ясна и только утверждает, что:

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

1 ответ

Решение

Они оба абсолютно одинаковы.

offsetExists определяется как псевдоним метода contains и включен просто для соответствия ArrayAccess интерфейс.

Вы можете увидеть в источнике, что SPL_MA (метод псевдоним) используется, а также, что есть несколько других псевдонимов, настроенных.

  • offsetExists = содержит
  • offsetSet = присоединить
  • offsetUnset = отсоединить
Другие вопросы по тегам