Cakephp3の/** @return xxx */などのコメントっぽい記述について
Controller、Modelのクラスやメゾットの上にある下記の記述について。
/**
* Index method
*
* @return \Cake\Http\Response|null
*/
コメントのようなので「Cakephp コメント @return」でググるんですが、なかなか記事が見つからず…
どうやらコメントではなく、PHPDoc、DocBlock、ドキュメントブロックなどと言うそう。
(記事に引っかかってても、その言葉を知らなかったのでスルーしていたのかもしれません…)
PHPDocとは
そのクラスやメゾットの説明を書いておくものです。
書き方は大まかに決まっていて、まず最初に説明があり、その次に@paramなどのタグと説明を書いていきます。(アノテーションともいう)
タグの種類はたくさんあり、それぞれ説明されるものが異なります。
@paramなら引数の説明、@returnなら返り値の説明…など。
これを書いておくことで、他の人がPHPDocを見ただけでそのクラスやメゾットがどのようなものか、何を渡せばいいか、何が返ってくるかなどを知ることができます。
コメントのようですが、コメントより開始のアスタリスクが1つ多いのが特徴(/** */)です。
/*
* これは複数行コメント
*/
/**
* これはPHPDoc
*/
PHPDocの読み方
CakePHPでnewsをbakeしたときにNewsController.phpに出来たViewメゾットを見てみます。
/**
* View method
*
* @param string|null $id News id.
* @return \\Cake\\Http\\Response|null
* @throws \\Cake\\Datasource\\Exception\\RecordNotFoundException When record not found.
*/
public function view($id = null)
{
$news = $this->News->get($id, [
'contain' => ['Newscategories'],
]);
$this->set('news', $news);
}
- View method
メゾットの説明です。そのまま。
- @param string|null $id News id.
@param / string|null / $id / News id.で区切って読みます。@param
は引数の説明、つまり($id = null)を指します。string|null
は型の説明、この場合stringかnullが入ることを表します。$id
はメゾット内の変数名を表します。News id.
は説明です。
- @return \Cake\Http\Response|null@return
は戻り値の説明です。このメゾットで何が返るかを説明します。
この場合httpレスポンスかnullが返ります。
- @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.@throws
はどんな例外を発生させる可能性があるのかを説明します。\\Cake\\Datasource\\Exception\\RecordNotFoundException
は例外のタイプ、When record not found.
は説明です。
例外、というのが知識不足でよくわからずなのですが、対応するidのレコードがない場合、RecordNotFoundExceptionタイプのエラーを発生させ説明文を表示させる、といった内容?
PHPDocの書き方
必須項目は人によるかもしれませんが、@var
@param
@return
…は最低限書いたほうがいいのかもしれません。@var
[型] 説明 … 変数の型を明示
/**
* API version number
*
* @var string
*/
protected $version = '2.0';
@param
[型] 変数名 説明 … 引数の説明@return
[型] 説明 … 返り値の説明
/**
* 税込価格を計算
*
* @param int $price 本体価格
* @return double 税込価格
*/
public function getTaxedPrice($price)
{
$taxPrice = $price * 1.08;
return number_format($taxPrice);
}
getTaxedPrice(1000);
// 結果 1,080