4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHP: IF文(初心者向け)

Last updated at Posted at 2020-11-01

if(式)

式がtrueなら最初のくくりで処理が行われます。
式がtrueでなくてelseがあればelseくくりで処理が行われます。

公式リンク

ifのいろいろなパターン
//超基本形
if () {
    //式 が trueなら処理が行われる
}
//否定形
if (!) {
    //式 が falseなら処理が行われる
}
//if ~ else
if () {
    //式 が trueなら処理が行われる
} else {
    //式 が falseなら処理が行われる
}
//if ~ elseif ~ else
if (式1) {
    //式1 が trueなら処理が行われる
} elseif (式2){
    //式2 が trueなら処理が行われる
} else {
    //式1 と 式2 が true でなかったときに処理が行われる
}

おまけ・よく出る比較演算子(詳しくは公式で)

公式リンク: 例がたくさんあります

よく使う比較演算子
//同じか?
if ($a == $b) {
    //$a が $bに等しいとき -> true -> 処理が行われる
}
//違っているか?
if ($a != $b) {
    //$a が $bに等しくないとき -> true -> 処理が行われる
}
//小さいか?
if ($a < $b) {
    //$a が $bより小さいとき -> true -> 処理が行われる
}
//大きいか?
if ($a > $b) {
    //$a が $bより大きいとき -> true -> 処理が行われる
}
//小さい若しくは等しいか?
if ($a <= $b) {
    //$a が $bより小さいか等しいとき -> true -> 処理が行われる
}
//大きい若しくは等しいか?
if ($a >= $b) {
    //$a が $bより大きいか等しいとき -> true -> 処理が行われる
}

使用例

使用例
$a = 5;
$b = 10;

//等しいか?
if ($a == $b) {
    echo '$a と $b は等しい';
} else {
    echo '$a と $b は等しくない';
}
//-> $a と $b は等しくない

//大きいか?小さいか?
if ($a <= $b) {
    echo '$a と $b より小さいか等しい';
} elseif ($a > $b) {
    echo '$a は $b より大きい';
}
//-> $a は $b より小さいか等しい

//気をつけないといけないパターン
$res = '';
if ($a == $b) {
    echo '$a と $b は等しい';
}
//-> なにも出力されません。
// 式がfalseかつ elseがないので resには何も入りませんでした。

if (式) { は、trueなら最初のくくりを処理します。
そうでないときにelseがあればelseくくりを処理します。

ネストの闇の話

深いネストはアンチパターン
if (Aの条件) { //if:A
    //Aの条件が通ったとき
    if (Bの条件) {  //if:B
        //Bの条件が通ったとき
        if (Cの条件) {    //if:C
            //Cの条件が通ったとき
        } else {         //if:C
            //Cの条件が通らなかったとき
        }
    } else {       //if:B
        //Bの条件が通らなかったとき
    }
} else {      //if:A
    //Aの条件が通らなかったとき
}

ネストとは上記のようにifの中ifが入った (入れ子)状態をいいます。
ネストの深い条件分岐読むのに時間がかかるようになります。
上記のようにネストは3つぐらいに抑えたいですね。

ネストを抑えるために: 一例

ガード節
if (!Aの条件) {
    //Aの条件が通らなかったとき
    //終了
}
if (!Bの条件) {
    //Bの条件が通らなかったとき
    //終了
}
if (Cの条件) {
    //A、B、Cの条件が通ったとき
}

A、Bの条件通らなかったときに終了としたのは少し乱暴ですが、考え方として捉えてください。
ネストだとAの条件Bの条件頭のどっかに置いたままコードリーディングします。
対してガード節だと、AとBが通らなかったときは終了しているのでCの条件に集中できるので理解しやすくなります。

ここまで読んでいただいてありがとうございます!
初心者の方への一助になれば幸いです。

LGTMお願いします!
ストックのついでにお願いします!
モチベーションがあがります!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?