PHP
Laravel

Laravelのコンソールコマンドのhandle関数の戻り値はどう使われる?

More than 1 year has passed since last update.


はじめに

Laravelでコンソールコマンドを作成するときに、artisanのmake:commandを使うと思いますが、生成されたファイルをよく見るとhandle関数の戻り値がmixedになっています。

    /**

* Execute the console command.
*
* @return mixed
*/

public function handle()
{
//
}

でもドキュメントのArtisanコンソールを見ても戻り値を返している例が一つも無く説明もありません。気になるので調べて見ました。


調査

適当にコマンドクラスを作ってhandleの中でブレークさせて処理を追いかけてみます。

スクリーンショット 2018-04-27 9.08.35.png

ただ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として扱われます。