最近の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-key
はint
とstring
のスーパータイプです。
/**
* @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