Ds\Set::add

(PECL ds >= 1.0.0)

Ds\Set::add向集合添加值

描述

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

将所有给定的值添加到集合中,这些值还没有被添加。

注意:

支持 对象 类型的值。如果对象实现了 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