(PECL ds >= 1.0.0)
Ds\Set::add — Добавляет значения в набор
Добавляет все заданные значения в набор, если они ранее не были добавлены.
Замечание:
Поддерживаются значения типа object. Если объект реализует интерфейс Ds\Hashable, проверка производится путём вызова метода объекта
equals. Если объект не реализует интерфейс Ds\Hashable, объекты должны ссылаться на один и тот же экземпляр класса.
Все сравнения строгие (по типу и значению).
valuesДобавляемые значение.
Функция не возвращает значения после выполнения.
Пример #1 Пример использования Ds\Set::add() со скалярными значениями
<?php
$set = new \Ds\Set();
$set->add(1);
$set->add(1);
$set->add(2);
$set->add(3);
// Производится строгое сравнение, поэтому "1" не приведётся к int(1)
$set->add("1");
$set->add(true);
var_dump($set);
?>Вывод приведённого примера будет похож на:
object(Ds\Set)#1 (5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  string(1) "1"
  [4]=>
  bool(true)
}
Пример #2 Пример использования Ds\Set::add() с объектами
<?php
class HashableObject implements \Ds\Hashable
{
    /**
     * Произвольное значение для использования в качестве значения хеша.
     * Не определяет равенство.
     */
    private $value;
    public function __construct($value)
    {
        $this->value = $value;
    }
    public function hash()
    {
        return $this->value;
    }
    public function equals($obj): bool
    {
        return $this->value === $obj->value;
    }
}
$set = new \Ds\Set();
$obj = new \ArrayIterator([]);
// При добавлении одного и того же экземпляря несколько раз, добавится только первый.
$set->add($obj);
$set->add($obj);
// При добавлении нескольких экземпляров одного и того же объекта, они все добавятся.
$set->add(new \stdClass());
$set->add(new \stdClass());
// При добавлении объектов с одинаковым хешем несколько раз, добавится только первый.
$set->add(new \HashableObject(1));
$set->add(new \HashableObject(1));
$set->add(new \HashableObject(2));
$set->add(new \HashableObject(2));
var_dump($set);
?>Вывод приведённого примера будет похож на:
object(Ds\Set)#1 (5) {
  [0]=>
  object(ArrayIterator)#2 (1) {
    ["storage":"ArrayIterator":private]=>
    array(0) {
    }
  }
  [1]=>
  object(stdClass)#3 (0) {
  }
  [2]=>
  object(stdClass)#4 (0) {
  }
  [3]=>
  object(HashableObject)#5 (1) {
    ["value":"HashableObject":private]=>
    int(1)
  }
  [4]=>
  object(HashableObject)#6 (1) {
    ["value":"HashableObject":private]=>
    int(2)
  }
}
