(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);
// 嚴格比較不會將這些值視為與 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) } }