引数の型を取得する

# ReflectionParameter::getType

(PHP 7, PHP 8)

ReflectionParameter::getType — 引数の型を取得する

### 説明

public function ReflectionParameter::getType(): ?ReflectionType

引数の型を取得します。

### パラメータ

この関数にはパラメータはありません。

### 戻り値

引数の型が指定されていれば ReflectionType オブジェクトを返します。 そうでなければ `null` を返します。

### 例

例1 PHP 7.1.0 以降での ReflectionParameter::getType() の使い方

PHP 7.1.0 以降では、 ReflectionType::__toString() が推奨されなくなったので、 ReflectionParameter::getType() は ReflectionNamedType を返す 可能性があります。 この場合、引数の方の名前を取得するために、ReflectionNamedType() が利用可能です。

    <?php
    function someFunction(int $param, $param2) {}

    $reflectionFunc = new ReflectionFunction('someFunction');
    $reflectionParams = $reflectionFunc->getParameters();
    $reflectionType1 = $reflectionParams[0]->getType();
    $reflectionType2 = $reflectionParams[1]->getType();

    assert($reflectionType1 instanceof ReflectionNamedType);
    echo $reflectionType1->getName(), PHP_EOL;
    var_dump($reflectionType2);
    ?>

上の例の出力は以下となります。

    int
    NULL

例2 PHP 7.1.0 より前の ReflectionParameter::getType() の使い方

    <?php
    function someFunction(int $param, $param2) {}

    $reflectionFunc = new ReflectionFunction('someFunction');
    $reflectionParams = $reflectionFunc->getParameters();
    $reflectionType1 = $reflectionParams[0]->getType();
    $reflectionType2 = $reflectionParams[1]->getType();

    echo $reflectionType1, PHP_EOL;
    var_dump($reflectionType2);
    ?>

上の例の PHP 7.0 での出力は、このようになります。

    int
    NULL

例3 PHP 8.0.0 以降の ReflectionParameter::getType() の使い方

PHP 8.0.0 以降では、このメソッドは ReflectionNamedType や ReflectionUnionType のインスタンスを返す可能性があります。 後者は前者の集合です。後者の型を解析するには、 ReflectionNamedType の配列に正規化する方が便利です。 以下の例に示す関数は、`0` または ReflectionNamedType のインスタンスの配列を返します。

    <?php
    function getAllTypes(ReflectionParameter $reflectionParameter): array
    {
        $reflectionType = $reflectionParameter->getType();
        if (!$reflectionType) return [];
        return $reflectionType instanceof ReflectionUnionType
            ? $reflectionType->getTypes()
            : [$reflectionType];
    }
    ?>

### 参考

- ReflectionParameter::hasType() - 引数が型を持つかを調べる
- ReflectionType::__toString() - 文字列に変換する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open