タイプ

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双方の静的解析ツールでサポートされます。その他詳細はこちらをご覧ください。


関連 PHPStormプラグイン