Набор
PHP Manual

Ds\Set::add

(PECL ds >= 1.0.0)

Ds\Set::addДобавляет значения в набор

Описание

public void Ds\Set::add ([ mixed $...values ] )

Добавляет все заданные значения в коллекцию, если они ранее небыли добавлены.

Замечание:

Поддерживаются значения типа 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)
  }
}

Набор
PHP Manual