PHPDoc
PHPDocコメントは、通常、対象となるコード(クラス、メソッド、プロパティなど)の直前に配置され、 /**
で始まり */
で終わります。各行はアスタリスク *
で始めるのが一般的です。
クラスのドキュメント
@package
:クラスが属するパッケージを指定。
@author
:クラスの作成者。
@version
:クラスのバージョン情報。
メソッドのドキュメント
@param
:メソッドの引数を説明。型と変数名、説明を記述。
@return
:メソッドの返り値の型と説明。
@throws
:メソッドが投げる可能性のある例外。
@param-immediately-invoked-callable
@param-later-invoked-callable
遅延評価かどうか?
@param-closure-this
プロパティのドキュメント
@var
:プロパティの型と説明。
その他の一般的なタグ
@deprecated
:非推奨であることを示す。使用を避けるべき理由や代替案を記述。
@see
:関連するクラスやメソッドへの参照を提供。
@example
:使用例を提供。
@inheritdoc
:親クラスやインターフェースのドキュメントを継承。
型の指定
単一型の場合:
php/**
@var string ユーザー名
*/
private $username;
複数の型の場合(ユニオン型):
php/**
@param int|string $id ユーザーID
*/
public function setId($id) {}
配列の場合:
php/**
@var int[] ユーザーのID一覧
*/
private $userIds;
ジェネリックな配列の場合:
php/**
@var array<string, int> ユーザー名とIDのマッピング
*/
private $userMap;
連想配列
php/**
* @var array{ email: string, username: string }
*/
これはtsでの { email: string, username: string }
と同等のイメージ
array
というキーワードを使っているのに別にarrayでもないという紛らわしさ
連想配列の配列
php/**
* @var array<array{ email: string, username: string }>
*/
php/**
* @var array{ email: string, username: string }[]
*/
これはtsでの Array<{ email: string, username: string }>
と同等のイメージ
inline @var
php/** @var Foo $foo */
$foo = createFoo();
あまり使うべきでない
強制的にその型と見なされる
PHPStanは常にそれを信頼する
inline @var はシンボルのすべての使用箇所で繰り返し記述する必要がある
代替案
stab fileを使う
assert()を使う
要件が満たされない場合にランタイムで例外が投げられる
php$foo = createFoo();
assert($foo instanceof Foo);