(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)
}
}