はじめに
Laravelでコンソールコマンドを作成するときに、artisanのmake:command
を使うと思いますが、生成されたファイルをよく見るとhandle
関数の戻り値がmixed
になっています。
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
}
でもドキュメントのArtisanコンソールを見ても戻り値を返している例が一つも無く説明もありません。気になるので調べて見ました。
調査
適当にコマンドクラスを作ってhandleの中でブレークさせて処理を追いかけてみます。
ただreturnしてるだけのような所は省略して
Command.php
の252行:
public function run(InputInterface $input, OutputInterface $output)
{
# ...略...
if ($this->code) {
$statusCode = call_user_func($this->code, $input, $output); # ←ここ
} else {
$statusCode = $this->execute($input, $output);
}
return is_numeric($statusCode) ? (int) $statusCode : 0;
}
$statusCode
で戻り値を受けていますが、最後のreturn
文で、is_numeric
ならint型にキャスト、そうでなければ0を返しています。
この値が最終的にartisan
スクリプトの最後のexit($status);
で使われるようになっていました。
まとめ
handle
関数の戻り値はartisanコマンドの終了ステータスに使われます。値がis_numeric
でなければ0として扱われます。