2024 年 PHP 日本會議

ReflectionUnionType::getTypes

(PHP 8)

ReflectionUnionType::getTypes傳回聯合類型中包含的類型

說明

public ReflectionUnionType::getTypes(): 陣列

傳回聯合類型中包含的類型反射。

參數

此函式沒有參數。

傳回值

一個 ReflectionType 物件的陣列。

範例

範例 #1 ReflectionUnionType::getTypes() 範例

<?php
function someFunction(int|float $number) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParam = $reflectionFunc->getParameters()[0];

var_dump($reflectionParam->getType()->getTypes());

以上範例的輸出會類似於

array(2) {
    [0] =>
    class ReflectionNamedType#4(0) {
    }
    [1] =>
    class ReflectionNamedType#5(0) {
    }
}

另請參閱

新增註解

使用者貢獻的註解 2 則註解

baptiste at pillot dot fr
1 年前
排序

與預期相反,返回的 ReflectionType 物件陣列不會按照原始碼中宣告類型的順序排序。

- 類別、介面、特性、iterable(由 Traversable 取代)、ReflectionIntersectionType 物件、parent 和 self:這些類型將會先返回,順序與它們宣告的順序相同。
- static 和所有內建類型(iterable 由 array 取代)將會在之後返回。它們將會永遠按照以下順序返回:static、callable、array、string、int、float、bool(或 false 或 true)、null。

請注意,當在聯集類型中使用時,iterable 是 Traversable|array 的別名。ReflectionUnionType::getTypes 將會返回這兩個 ReflectionNamedType 物件,而不是單一個名為 'iterable' 的物件。

範例
<?php
類別 PC {}
類別
C 繼承 PC {
函式
f(): null|bool|float|int|parent|PC|string|iterable|(ReflectionClass&ReflectionProperty)|callable|static|self|C {}
}
echo
join(', ', array_map(
函式(
$t) { return ($t instanceof ReflectionIntersectionType) ? '<intersection>' : $t->getName(); },
(new
ReflectionMethod('C', 'f'))->getReturnType()->getTypes()
)) .
"\n";
?>

將顯示
parent, PC, Traversable, <intersection>, self, C, static, callable, array, string, int, float, bool, null

試看看: https://onlinephp.io/c/777c6
baptiste at pillot dot fr
1 年前
ReflectionUnionType::getTypes 只會回傳一個包含 ReflectionNamedType 和/或 ReflectionIntersectionType 物件的陣列。
To Top