PHP 的 set
集合(在 PHP 8.1 之后引入)是一種特殊的數據結構,它允許你存儲唯一的值,無論是標量還是對象。這意味著你可以將任何類型的值添加到 set
中,只要它們是可比較的。以下是一些可以存儲在 PHP set
中的值類型:
標量類型:
復合類型:
__invoke()
方法或者重寫 __toString()
方法以便能夠被比較。NULL:可以存儲 null
值,但在 PHP 8.1 之前,set
不支持 null
作為唯一值存儲。從 PHP 8.1 開始,null
可以被添加到 set
中,并且在集合中是唯一的。
類名(Class name):可以作為字符串存儲,但前提是這些類已經定義并且可以被實例化或比較。
需要注意的是,由于 set
要求存儲的值是可比較的,因此你不能將不可比較的類型(如資源類型)存儲到 set
中。此外,從 PHP 8.1 開始,set
中的元素必須是可哈希的(hashable),這意味著它們要么是標量類型,要么是實現了 __invoke()
或 __toString()
方法的對象。
以下是一個 PHP set
的示例,展示了可以存儲在其中的不同類型:
<?php
// 創建一個空 set
$set = new Set();
// 添加標量類型
$set->add(42);
$set->add('hello');
$set->add(true);
// 添加數組(元素也必須是可比較的)
$set->add([1, 2, 3]);
// 添加對象(必須實現 __invoke() 或 __toString())
class MyClass {
public function __invoke($value) {
return $value;
}
}
$obj = new MyClass();
$set->add($obj);
// 從 PHP 8.1 開始,可以添加 null
$set->add(null);
// 輸出 set 的內容
foreach ($set as $value) {
echo $value . PHP_EOL;
}
?>
在這個示例中,我們創建了一個 set
,并向其中添加了不同類型的值,包括整數、字符串、布爾值、數組、對象和 null
。