(PECL ds >= 1.0.0)
Ds\Set::add — 向集合添加值
将所有给定的值添加到集合中,这些值还没有被添加。
注意:
支持 对象 类型的值。如果对象实现了 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);
// 严格比较不会将这些与 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) } }