目次

PHPの勉強(下書)

PHP処理の分岐・比較(下書き)

PHPは2つの値(式の結果・数値・文字列)を比べて正しいか正しく無いかで処理を分ける事ができます。

if命令とswitch命令で分岐します。ifでは比較のため比較演算子を使います。


if命令

条件と一致するかしないかで二択に処理を分けれます。複数つなげることで複雑に処理を分ける事ができます。

判定には「=」「!」「<」「>」を組み合わせた文字列「比較演算子」を使い左辺と右辺を比較します。(真の判定では比較演算子を使わない場合もあります)

例:下記の例ではテストの点数により合格は追試かを表示する例です

<?php
  $point=31; //テストの点数を入力
  if ( $point > 30 ){
    echo '<p>30点越えは合格</p>';
  }else{
    echo '<p>30点以下は追試</p>';
  }
?>

使用できる比較演算子は下記の9種類

演算子説明
==左辺と右辺が等しい
===左辺と右辺が等しく型も同じ
!=左辺と右辺が等しくない
!==左辺と右辺が等しくない・または型も違う
<>左辺と右辺が等しくない(数値)
>左辺が大きい(右辺が小さい)
>=左辺が大きいか両辺が等しい(右辺が小さい)
<左辺が小さい(右辺が大きい)
<=左辺が小さいか両辺が等しい(右辺が大きい)

1.「if」、条件が一致した時は1→2→3と処理が進み、一致しない場合は1→3と処理が進みます。2の部分でもifは使えます

  //(1)
  if( 条件 ){
    //(2)条件が一致したら処理する
  }
  //(3)

2.「if else」、条件が一致した時は1→2→4と処理が進み、一致しない時は1→3→4と処理が進みます

  //(1)
  if( 条件 ){
    //(2)条件が一致したら処理する
  } else{
    //(3)条件が一致したら処理する
  }
  //(4)

3.「if else if」2回の条件判定があります。条件aが一致すれば1→2→4(条件bは判定しない)、条件aが不一致なら条件bを判定して一致すれば1→3→4、不一致なら1→4と処理が進みます。これに続けてさらにelse if をつなげれば細かく分岐できます。

  //(1)
  if( 条件a ){
    //(2)条件が一致したら処理する
  } else if ( 条件b ){
    //(3)条件が一致したら処理する
  }
  //(4)

else ifを使わなくても次のように掛けます。ただしelse if が増えれば増えるほと入れ子(ネスト)が増えるのでプログラムソースが見難くなります。

  //(1)
  if( 条件a ){
    //(2)条件が一致したら処理する
  }else{
    if( 条件b ){
      //(3)条件が一致したら処理する
    }
  }
  //(4)

4.「if else if else」2回の条件判定があります。条件aが一致すれば1→2→5(条件bは判定しない)、条件aが不一致なら条件bを判定して一致すれば1→3→5、不一致なら1→4→5と処理が進みます。

  //(1)
  if( 条件a ){
    //(2)条件が一致したら処理する
  } else if ( 条件b ){
    //(3)条件が一致したら処理する
  } else{
    //(4)
  }
  //(5)

switch命令

switchは比較元の値と一致する場合に限り複数の分岐ができます。

ifと比べると比較演算子が使えないので複雑な分岐はできません。

例:アクセスカウンターなどに設置して1回目・50回目・100回目で特別なメッセージを流し、その他は「いらっしゃいませ」と表示する例です。

<?php
  $count=1; //何回目アクセスしたか格納する(ここでは手動で入力)
  siwtch($count){
    case 1:
      echo '<p>はじめてのアクセスですね、これからよろしく。</p>';
    break;
    case 50:
      echo '<p>50回目のアクセスです。</p>';
    break;
    case 100:
      echo '<p>100回目のアクセスです。ありがとうございます</p>';
    break;
    default:
    echo 'いらっしゃいませ';
  }
?>

$count に比較元の値をセットし、caseの後に続く値と一致すれば break;まで処理します。すべてのcaseに一致しない場合defaultを処理します。

値が一致する場合に処理を分ける事ができます。

ifでは2つ以上の処理に分ける場合は何度も比較演算子を使用して比較していましたが、switchは値が一致する場合

switchは値が一致するか

switchは比較演算子を使った複雑な処理の分岐はできません

ifでは2つ以上の処理に分ける場合は何度も比較演算子を使用して比較していましたが、switchは値が一致する場合は複数の処理に分ける事ができます。

1.値aが比較値1と一致する場合は1→2→4、比較値2と一致する場合は1→3→4、一致しない場合は1→4と処理します。

//(1)
siwtch(比較元の値や式){
  case 比較値1:
    //(2)
  break;
  case 比較値2:
    //(3)
  break;
}
//(4)

2.defaultあり:値aが比較値1と一致する場合は1→2→5、比較値2と一致する場合は1→3→5、一致しない場合は1→4→5と処理します。

//(1)
siwtch(値a){
  case 比較値1:
    //(2)  
  break;
  case 比較値2:
    //(3)
  break;
  default:
    //(4)
}
//(5)

3.caseから次のcaseの間にbreakが無い場合は条件が一致した後に最初に見つかるbreakまでcaseを処理します。値aが比較値1と一致する場合は1→2→3→6、比較値2と一致する場合は1→3→6、比較値3・4と一致する場合は1→4→5→6、一致しない場合は1→5→6、

//(1)
siwtch(値a){
  case 比較値1:
    //(2)  
  case 比較値2:
    //(3)
  break;
  case 比較値3:
  case 比較値4:
    //(4)  
  break;
  default:
    //(5)
}
//(6)