こんにちはフロントエンドエンジニアのまさにょんです!
今回は、PHPでプログラムを強制終了させるexitの使い方について解説していきます。
目次
PHPでプログラムを強制終了させるexitの使い方
PHPのexit関数とは?
exit()
は、何かしらの理由でプログラムを強制終了させたいときに使用するPHPの関数です。
次の説明にあるとおり、引数には文字列か数値(0-254まで)を渡せます。
また、exit()
では、0は正常終了扱い、0以上の数値は異常終了扱いになっています。
exit — メッセージを出力し、現在のスクリプトを終了する
[ 説明 ]
exit(string
$status
= ?): voidexit(int
$status
): voidスクリプトの実行を終了します。
シャットダウン関数 や オブジェクトのデストラクタ は、
exit
がコールされた場合にも実行されます。
exit
は言語構造です。status
を指定しない場合は括弧なしでコールできます。[ パラメーター ]
- status
status
が文字列の場合は、この関数は終了直前にstatus
を表示します。
status
が int の場合は その値が終了ステータスとして使われ、表示はされません。終了ステータスは 0 から 254 までの値でなければなりません。
終了ステータス 255 は PHP に予約されており、使用してはいけません。
ステータス 0 は、 プログラムを正常終了させる際に使用します。
[ 戻り値 ]
値を返しません。
引用元: PHP-Manual: exit
exit(文字列)で、プログラムを強制終了&コンソールに文字列を出力する
exit(文字列)
で文字列を引数にした場合は、コンソール画面に渡した文字列を出力することができます。
強制終了させるだけでなくエラーメッセージなどを表示させられるので、エラーの理由を表示させたい時に役立ちます。
<?php
// プログラムを強制終了させたいときに、役立ちます!
echo 'プログラム起動' . "\n";
exit('プログラムを強制的に終了します');
echo 'この部分は出力されない・・・' . "\n";
// [ 実行結果 ]
// プログラム起動
// プログラムを強制的に終了します
ちなみに、Macのターミナル画面で、echo $?
を使用すると0
が帰ってくるので、
文字列を渡した場合は、正常終了扱いであることがわかります。
echo $?
0
exit(数値)で、プログラムを強制終了&Statusの数値を返す
exit()
では、0は正常終了扱い、0以外の数値は異常終了扱いになっています。
<?php
// 正常終了・系統
exit;
exit();
exit(0);
exit('正常終了しました');
// 異常終了・系統 => 0以外の数値
exit(1);
exit(7);
?>
また、exit()
に数値を渡した場合は、Status番号として扱われており、出力すると渡した数値が表示されるようになっています。
まずは次のPHPファイルを実行してみましょう。
<?php
$value = 25;
if ($value < 20){
exit(0);
} else {
exit(7);
}
上記のPHPファイルの実行結果をecho $?
を使用して確認すると7
が出力されます。
echo $?
7
ステータス・ナンバーを返して処理を強制終了する
exitの具体的な使い方として、処理のエラーハンドリングとして異常系を検出した場合、
予め定義しておいたエラーコード(ステータス・ナンバー)をコントロール側に返してプログラムを終了するといった使い方もできます。
何番のエラーコード(ステータス・ナンバー)は、こういう意味とあらかじめ決めておけばどこでどんなエラーが起きたのか見極めやすくなります。
【PHP入門】プログラムを終了する方法(exit/die) から引用する のステータスを指定する処理をするSampleCodeがわかりやすいので引用します。
//ファイル読み込み処理
function FileRead($pass){
//ファイルオープン
if (!fopen($pass, 'r')){
echo "ファイル[{$pass}]を正常に読み込めません". "\n";
return 1;
}
/* 成功時の処理・・・ */
}
//ファイルパスを指定して関数を呼び出す
$file = 'sample/pass/sample-file.txt';
$ret = FileRead($file);
//ステータスが0以外だったら終了処理
if ($ret != 0){
echo "異常終了:[{$ret}]". "\n";
exit($ret);
}
die() と exit() の違い
ちなみに、die()
は、exit()
と同じくメッセージを出力してプログラムを終了するときに使用します。
言語仕様的に違いはなく、PHP-Manualにも次のとおり記載があります。
注意: この言語構造は、die() と等価です。
引用元: PHP-Manual: exit
記述方法も同様なので、好きな方を使いましょう。
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!