最近のPHPDocでの型の書き方

最近のPHPDocでの型の書き方が覚えられないので、まとめておきます。

配列

キーと値の型

キーがTKey、値がTValue

/**
 * @param array<TKey, TValue> $array
 */

キーがint、値がstring

/**
 * @param array<int, string> $array
 */

キーがint、値がint

/**
 * @param array<int, int> $array
 */

[10 => 100, 20 => 200, 30 => 300] のような配列で要素数は不明。

オブジェクトっぽい配列

以下の配列の場合、

$array = ["hello", "world", "foo" => new stdClass, 28 => false];

以下のように書きます。

/**
 * @param array{0: string, 1: string, foo: stdClass, 28: false} $array
 */

オプションのキーには?を最後に付けます。

/**
 * @param array{optional?: string, bar: int} $array
 */

以下の配列は、どちらも同じで、int の要素が 2つの [10, 20] のような配列です。

/**
 * @param array{0: int, 1: int} $array1
 * @param array{int, int} $array2
 */

リスト

リストとはキーが 0 から始まる連番の配列です。array_is_list() で true となる配列です。

/**
 * @param list<string> $array
 */

スカラー

配列のキー

array-keyintstringのスーパータイプです。

/**
 * @param array-key $key
 */

正の整数

/**
 * @param positive-int $positiveInt
 */

クラス文字列

/**
 * @param class-string $classname
 */

型を指定することもできます。

/**
 * @param class-string<A> $classname
 */

callable文字列

/**
 * @param callable-string $callable
 */

ジェネリクス

/**
 * @template T
 * @param T $a
 * @return T
 */
function foo($a)
{
    return $a;
}

引数 $a の型は T(型変数)で、返り値の型は引数と同じになります。

参考

Date: 2021/03/10

Tags: php, phpstan, psalm