(PECL ds >= 1.0.0)
Ds\Set::add — Ajoute des valeurs à la séquence
Ajoute toutes les valeurs données à l'ensemble qui n'ont pas déjà été ajoutées.
Note:
Les valeurs de type object sont supportées. Si un objet implémente Ds\Hashable, l'égalité sera déterminée par la fonction
equals
de l'objet. Si un objet n'implémente pas Ds\Hashable, les objets doivent être des références à la même instance pour être considérés comme égaux.
Toutes les comparaisons sont strictes (type et valeur).
values
Les valeurs à ajouter à la séquence.
Aucune valeur n'est retournée.
Exemple #1 Exemple de Ds\Set::add() utilisant les entiers
<?php
$set = new \Ds\Set();
$set->add(1);
$set->add(1);
$set->add(2);
$set->add(3);
// Les comparaisons strictes ne traiteraient pas ces valeurs de la même manière que int(1)
$set->add("1");
$set->add(true);
var_dump($set);
?>
Résultat de l'exemple ci-dessus est similaire à :
object(Ds\Set)#1 (5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> string(1) "1" [4]=> bool(true) }
Exemple #2 Exemple de Ds\Set::add() utilisant les objets
<?php
class HashableObject implements \Ds\Hashable
{
/**
* Une valeur arbitraire à utiliser comme valeur de hachage. Ne définit pas l'égalité.
*/
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([]);
// Ajouter la même instance plusieurs fois n'ajoutera que la première.
$set->add($obj);
$set->add($obj);
// Ajouter plusieurs instances du même objet ajoutera toutes les instances.
$set->add(new \stdClass());
$set->add(new \stdClass());
// Ajouter plusieurs instances d'objets hachables égaux n'ajoutera que la première.
$set->add(new \HashableObject(1));
$set->add(new \HashableObject(1));
$set->add(new \HashableObject(2));
$set->add(new \HashableObject(2));
var_dump($set);
?>
Résultat de l'exemple ci-dessus est similaire à :
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) } }