タイプ
phpのネイティブではサポートされていない型もPHPdoc typeを記述すれば、静的解析ツールが検査を行い対応するエディターでは補完もされます。 また将来のPHPで採用予定の型も先に利用できます。
例)リソースクラスのbody
の連想配列を”Object-like array”で指定
/** @var array{greeting: string} */
public $body;
/** @var list<array{name: string, age:int}> */
public $body;
リソースクライアントで取得したオブジェクトはassert()
するとツールが型を理解します。
$user = $this->resource->get('/user', []);
assert($user instanceof User);
$name = $user->body['name']; // nameキーが補間
$user->body['__invalid__']; // 未定義キーのアクセスはエラーに
リファレンス
アトミック型
これ以上分割できない型をアトミック型と呼びます。PHP7の型は全てこの型です。ユニオン型や交差型ではアトミック型を組み合わせて利用します。
スカラー型
/** @param int $i */
/** @param float $f */
/** @param string $str */
/** @param class-string $class */
/** @param class-string<AbstractFoo> $fooClass */
/** @param callable-string $callable */
/** @param numeric-string $num */
/** @param bool $isSet */
/** @param array-key $key */
/** @param numeric $num */
/** @param scalar $a */
オブジェクト型
ジェネリックオブジェクト
/** @return ArrayObject<int, string> */
ジェネレーター
/** @return Generator<int, string, mixed, void> */
Callable型
/** @return callable(Type1, OptionalType2=, SpreadType3...): ReturnType */
/** @return Closure(bool):int */
値型
/** @return null */
/** @return true */
/** @return 42 */
/** Foo\Bar::MY_SCALAR_CONST $a */
/** @param A::class|B::class $s */
配列型
ジェネリック配列
/** @return array<TKey, TValue> */
/** @return array<int, Foo> */
/** @return array<string, int|string> */
オブジェクト風配列 (Object-like arrays)
/** @return array{0: string, 1: string, foo: stdClass, 28: false} */
/** @return array{foo: string, bar: int} */
/** @return array{optional?: string, bar: int} */
リスト
/** @param list<string> $stringList */
PHPDoc配列
/** @param string[] $strings */
レガシーシンタックスのPHPDoc配列表記はarray<array-key, ValueType>
とジェネリック配列型として扱われます。
その他のアトミック型
/** @return iterable */
/** @return void */
/** @return empty */
/** @return mixed */
交差型
/** @return A&B */
ユニオン型
/** @return int|false */
/** @return 0|1 */
/** @return 'a'|'b' */
代表的な型を列挙しました。ここにリストした全てのPHPDoc Typesはpsam/phpstan双方の静的解析ツールでサポートされます。その他詳細はこちらをご覧ください。
- psalm - atomic_types | union | intersection
- phpstan - phpdoc type
関連 PHPStormプラグイン