Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

  1. Home
  2. PHPBeginner - The if Statement: Conditional Execution

The if Statement: Conditional Execution - Japanese Only

みなさまどうも。いかがお過ごしでしょうか。

さて、今回は『if文』(いふぶん)というものの解説です。『if文』とは『もし~ならば』という処理です。前回解説した『比較演算子』や『真偽値』がいっぱい出てきますので復習がてらやっていきましょう。

では以下のサンプルをみてください。

<?php
if(true){
    var_dump('実行されました!');
}

これが『if文』です。まず『if』と書き、その後に『()』を記述します。続いて『{}』の中に実行させたい処理を書きます。

『()』の中が『true』ならば『{}』の中身が実行され、『false』ならば実行されない、といった処理を構築できるのが『if文』です。

上記の場合は『()』の中が『true』となっていますね。なので『{}』の中に記述してある『var_dump('実行されました!');』が実行されるといった感じです。さらに『else文』(えるすぶん)というのを続けて記述することができます。こんな感じです。

<?php
if(false){
    var_dump('実行されました!');
}
else{
    var_dump('実行されました!その2');
}

これは最初の『if文』の『()』の中が『false』となった場合に問答無用で『else文』の『{}』の中身が実行されます。上記の場合は最初の『if文』が『false』なので『var_dump('実行されました!その2');』が実行されます。

さらにもういっちょ、『else if文』(えるすいふぶん)というのがあります。

<?php
if(false){
    var_dump('実行されました!');
}
else if(true){
    var_dump('実行されました!その2');
}

これは『if文』で処理を分岐させたあと、さらに別の『if文』をかませることができる処理となります。上記の場合は最初の『if文』で『false』となっているため、次の『else if文』に処理が移り、そこで『true』となっているので『var_dump('実行されました!その2');』が実行されます。

『else文』ではその前の『if文』が『false』ならば問答無用で実行されますが、『else if文』だとそのあとに更に処理を分岐させることができるといった違いです。そして『else if文』と『else文』を複数組み合わせることができます。

<?php
if(false){
    var_dump('実行されました!');
}
else if(false){
    var_dump('実行されました!その2');
}
else{
    var_dump('実行されました!その3');
}

上記の場合はまず『if文』で条件分岐、その後に『else if文』で条件分岐、その後全てが『false』ならば『else文』の処理が実行される、といったところです。ちなみに『else文』を記述する場合は必ず最後に記述しなくてはなりません

<?php
if(false){ // これはエラーです。
    var_dump('実行されました!');
}
else{
    var_dump('実行されました!その3');
}
else if(false){
    var_dump('実行されました!その2');
}

上記は『else文』の後に『else if文』を書いてます。これはエラーになりますので注意しましょう。さらに『else if文』を最初に書いちゃダメです。最初は必ず『if文』です。これも要注意ですね。

というわけでちょっとややこしくなってきましたので『if文』を複数書いた場合との違いを確認してみましょう。

<?php
if(true){
    var_dump('実行されました!');
}

if(true){
    var_dump('実行されました!その2');
}

これは2つの『if文』が記述されていますね。この2つの『if文』は全く別の処理として実行されます。上記の場合は両方『true』なので『var_dump('実行されました!');』と『var_dump('実行されました!その2');』が両方実行されます。

『else if文』では最初の『if文』が『false』となった時に続けて条件分岐が行われるので、最初の『if文』とセットで行われる処理になり、複数の『if文』を記述した場合はそれぞれ全く別の処理になります。こんがらがりやすいところなので間違えないようにしましょう。

さて、では『if文』の『()』に前回解説した『比較演算子』を入れてみます。

<?php
if(1 < 2){
    var_dump('実行されました!');
}

『()』の中に注目してみてください、『1 < 2』と記述されてみます。これは『true』なので『var_dump('実行されました!');』が実行されます。

ではちょっと応用編です。実はPHPでの『if文』等の『()』の中には『true』と『false』以外の値を入れることができます。以下の例をみてください。

<?php
if('miku'){
    var_dump('実行されました!');
}

これは『if文』の『()』に文字列『'miku'』ちゃんが入っています。普通に考えると『真』か『偽』という『真偽値』が入るべきところに『文字列』が入っちゃっているので全くさっぱりわけわかめでございますね。

ところがこれ、『true』扱いになって普通に『if文』の中身が実行されちゃいます。エラーはおこりません。なんだか不思議です。じゃあ続いて『空の文字列』をいれてみましょう。

<?php
if(''){
    var_dump('実行されました!');
}

これは『false』扱いになって実行されません。なんだかよくわからない展開になっていますね。

この理由は、PHPでは『true』扱いされる値と『false』扱いされる値が明確に分けられていることが原因です。以下を確認してみましょう。以下は全て『false』扱いとなり、ほかは全て『true』扱いとなります。

  • 真偽値『false』
  • 数値『0』
  • 浮動小数点数値『0.0』
  • 空の文字列(''とか"")および文字列の『0』
  • 空の配列(連想配列)
  • NULL

ちなみにPHPに限らず、他の言語でも同じように『true』扱いの値と『false』扱いの値が明確に分けられていたりするわけでございますが、言語によってかなりの違いがあるので上記の一覧はPHP専用、という感じで覚えておくと良いです。

注目すべきは『0』と『1』や空の文字列あたりですね。プログラミングでは『0』とか『1』とか空の文字列はよく登場しますので『true』扱いなのか『false』扱いなのかしっかり覚えておきましょう。

『if』文、『else if文』、『else文』は実行させたい処理が1文の場合は『{}』を省略して記述することができます。

<?php
if(true) var_dump('miku'); // こんな感じで1行で書けちゃいます。
else if(false) var_dump('IA');
else var_dump('rin');

ただし「読みづらい」という方が多いらしく、この構文はあまり推奨されない形のようです。ちなみに私は読みづらいとは全く感じないのでバリバリ使っちゃってます。この辺は状況によって判断すると良いでしょう。

というわけで『if文』とかの解説は以上となります。続いての記事では『if文』とセットで使われることが多い『論理演算子』というものをやっていきましょう。ではではこの辺で。またお会いしましょう。

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .