Search

検索したいワードを入力してください

2019年04月10日

PHPのexit関数を使ってプログラムを終了する方法

PHPにはスクリプトの実行を終了するexit関数が用意されています。exit関数には引数を1つ渡すことができます。引数に数値を渡した場合は終了ステータス、文字列を渡した場合は終了メッセージとなります。exitの使い方を具体例を挙げて解説していきます。

exit関数とは

PHPのexit関数は、PHPプログラムの実行を終了する関数です。正確には関数ではなく言語構造に分類されますが、関数と考えて問題ありません。引数を指定しない場合にカッコが省略できるなど、関数とは若干性質が異なります。

exitという英単語の意味は「出口」や「出ていくこと」ですので、「PHPプログラムの出口」や、「PHPプログラムから出ていく」と考えれば、exit関数の動きをイメージしやすくなるでしょう。

exitの基本的な書き方

exitの書き方は、大きく3種類あります。

1つ目は、引数を指定せず exit と書く方法です。PHPプログラムを正常終了させる、最も簡単な書き方です。

2つ目は、exitに引数をひとつ数値で指定する方法です。PHPプログラムに任意の終了ステータスをつける方法です。主にプログラムを異常終了させる場合の書き方です。

3つ目は、exitに引数をひとつ文字列で指定する方法です。終了メッセージを指定してPHPプログラムを正常終了する場合の書き方です。

PHPのexit関数を使ってプログラムの終了を行う方法

exit関数を使ったプログラムの終了方法について解説します。サンプルコードを用いながら使い方や終了時のステータスとメッセージについて細かく解説していきます。

exitの使い方

exit関数の基本的な使い方は簡単です。PHPプログラム中で"exit"と1単語を書けば、プログラムを終了することができます。

exit;

exit関数の使い方としては、メインスクリプトでexit関数を呼び出す方法、forやwhileなどのループ中でexit関数を呼び出す方法、関数内でexit関数を呼び出す方法があります。

メインスクリプトで終了する方法

メインスクリプトとは、関数の中などではなくて一番最初に呼び出された、一番外側のプログラムブロックを指します。関数などを定義していないPHPスクリプトは、全体がメインスクリプトになります。

メインスクリプト中でも、exitの書き方に変わりありません。以下のコードで終了できます。
exit;

PHPスクリプトの実行がexit関数を記述した行に到達した時点で、PHPスクリプトの実行が終了します。

ループ文の中で終了する方法

ループの中でも、exitと書けばプログラムが終了します。動作確認用に以下のサンプルコードを用意しました。

<?php
for ($i=0; $i<5; $i++) {
echo $i."\n";
if ($i==3) {
// (※1) ここに exit関数などを記述する。
}
}
echo "END\n";
?>


このコードを実行すると、以下の結果が得られます。

0
1
2
3
4
END


サンプルコード中の(※1)部分を変更しながら、ループ中のexit関数がどう動くかを解説していきます。

実行中のループから抜けるbreak

ループでまず思いつくのが、ループを終了するbreakです。breakを使ったサンプルコードは以下になります。

<?php
for ($i=0; $i<5; $i++) {
echo $i."\n";
if ($i==3) {
break;
}
}
echo "END\n";
?>


$i変数が3になったタイミングでループを抜けるため、実行結果は以下になります。

0
1
2
3
END


breakを用いたループの終了では、ループが"3"の出力までで終了し、ループの後に記述している"END"も出力されているところがポイントです。

ループ中でプログラムを終了するexit

次は、ループから抜ける break ではなく、exit関数に変更したサンプルコードです。

<?php
for ($i=0; $i<5; $i++) {
echo $i."\n";
if ($i==3) {
exit;
}
}
echo "END\n";
?>


$i変数が3になったタイミングでPHPスクリプトが終了するため、実行結果は以下になります。

0
1
2
3


ループ中でbreakするのと異なり、"END"が表示されていません。ループ中にexit関数を記述するとループの途中でプログラムが終了し、その後の処理は実行されません。

関数の中で終了する方法

関数の中でexit関数を呼ぶ場合も、ループ中でexit関数を呼ぶ方法と同様の動きをします。

関数を終了するreturnでは、関数の実行を終了した後、呼び出し元の関数やメインスクリプトに処理が戻ります。PHPスクリプトの実行を終了するexit関数では、呼び出し元に処理が返ることなくPHPスクリプトが終了します。

exitで返す「終了ステータス」や「メッセージ」を指定する方法

ここまでは、exit関数の最も簡単な使い方を説明してきました。

exit関数には、引数を渡すことで「終了ステータス」や終了時の「メッセージ」を指定することができます。

終了ステータスを指定する方法

終了ステータスとは、PHPスクリプトの実行が完了した際に、実行が「正常終了」だったか「異常終了」だったかを表す数値です。

終了ステータスは、0が正常終了で1〜255が異常終了を表します。exit関数の引数に数値を指定すると、指定した数値が終了ステータスとなりPHPスクリプトが終了します。

Linux や Mac OS Xの場合、PHPスクリプトの実行が完了した後に以下のコマンドを実行することで、終了ステータスをコンソール出力することができます。

echo $?

返して良い終了ステータスは0〜254

exit関数の引数に渡すことができる終了ステータスは0〜254までの数値です。

終了ステータスの値は、0が正常終了で1〜254が異常終了です。エラーの内容に応じて1〜254の値を使い分けることで、終了ステータスの値からエラーの内容が特定させることがてきます。

終了ステータス255はPHPで予約されており、開発者が exit関数の引数に255を指定することはできません。もし、PHPスクリプトが異常終了して終了ステータスが255だった場合、開発者が想定していないエラーが原因で異常終了したことが分かります。

終了ステータスを10進数で指定する方法

exit関数の引数に10進数の値を渡すと、引数の値が終了ステータスになります。

例えば、終了ステータス12でPHPスクリプトを異常終了させたい場合は、以下のコードを実装します。

exit(12);

PHPスクリプトの実行後、終了ステータスを確認すると12という値が得られます。

echo $?
12

終了ステータスを8進数で指定する方法

exit関数の引数には、8進数で値を渡すこともできます。引数の値を10進数に変換した値が終了ステータスになります。

PHPで8進数は、先頭に0を付けた0〜7の数値になります。例えば、終了ステータス12でPHPスクリプトを異常終了させたい場合は、以下のコードを実装します。

exit(014);


PHPスクリプトの実行後、終了ステータスを確認すると12という値が得られます。

echo $?
12

終了ステータスを16進数で指定する方法

exit関数の引数には、16進数で値を渡すこともできます。引数の値を10進数に変換した値が終了ステータスになります。

PHPで16進数は、先頭に0xを付けた数値とA〜Fのアルファベットになります。例えば、終了ステータス12でPHPスクリプトを異常終了させたい場合は、以下のコードを実装します。

exit(0xC);


PHPスクリプトの実行後、終了ステータスを確認すると12という値が得られます。

echo $?
12

終了ステータスを2進数で指定する方法(PHP 5.4.0以降)

exit関数の引数には、2進数で値を渡すこともできます。引数の値を10進数に変換した値が終了ステータスになります。ただし、PHPで2進数表記が使えるのはPHP5.4.0以降のみです。

PHPで2進数は、先頭に0bを付けた0か1の数値になります。例えば、終了ステータス12でPHPスクリプトを異常終了させたい場合は、以下のコードを実装します。

exit(0b1100);


PHPスクリプトの実行後、終了ステータスを確認すると12という値が得られます。

echo $?
12

引数を指定しなかった場合の終了ステータス

最初に解説したexit関数の使い方は引数を指定していませんでした。

exit関数の引数を省略した場合の終了ステータスは0となり、正常終了を表します。PHPスクリプトを正常終了させたい場合、以下3つの書き方ができます。

exit;
exit();
exit(0);


次に解説する「終了時にメッセージを表示する方法」もPHPスクリプトが正常終了します。

終了時にメッセージを表示する方法

exit関数の引数には、数値の他に文字列を指定することができます。

exit関数の引数に文字列を指定した場合、指定した文字列をコンソール出力してPHPスクリプトが正常終了します。

例えば、「処理が完了しました。」とメッセージを出力してPHPスクリプトを終了させたい場合は、以下のコードを実装します。

exit('処理が完了しました。');

メッセージと終了ステータスは同時に指定できるのか?

exit関数に渡せる引数は1つのみです。引数に「終了ステータス」を渡すか、「メッセージ」を渡すかは何れかしか指定できません。exit関数にメッセージと終了ステータスを同時に指定することはできません。

exit関数の引数で「メッセージ」を指定した場合は、正常終了ですので「終了ステータス」は0になります。

その他のプログラム終了の関数

exit関数 と同じ働きをする die関数

PHPスクリプトを終了する関数には、exit関数の他にdie関数があります。

exit関数とdie関数は関数名の違いだけで、動きは全く同じです。PHPの公式サイトにも「この言語構造は、die() と等価です。」と明記されています。

多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related