PHP Conference Japan 2024

Ds\Set::add

(PECL ds >= 1.0.0)

Ds\Set::add新增值到集合

說明

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

將所有給定的值新增到集合中,前提是這些值尚未被新增。

注意:

支援 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)
  }
}
新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top