先週の宿題。
結論としては、山口さんが正しかったです。
また、いろいろ調べている中で
変数の代入について書いてあったページがあったので、載せておきます。
プログラミングの構文は以下の3つに大別できる。
これらを組み合わせながらプログラミングしていくことを
構造化プログラミングという
PHPも例外ではなく構造化プログラミングのための制御構文を標準で提供している
if文の構文
if ( 条件式 ) { // 条件式がtrueの場合に実行する処理 }
if ( 条件式 ) { // 条件式がtrueの場合に実行する処理 } else { // 条件式がfalseの場合に実行する処理 }
if ( 条件式1 ) { // 条件式1がtrueの場合に実行する処理 } elseif ( 条件式2 ) { // 条件式2がtrueの場合に実行する処理 } … } else{ // 条件式1、2…がいずれもfalseの場合に実行する処理 }
switch文の構文
switch ( 式 ) { case 値1: // 「式 = 値1」の場合に実行する処理 break; case 値2: // 「式 = 値2」の場合に実行する処理 break; … default: // 式の値が1、2、…のいずれでもない場合に実行する処理 break; }
尚、「defaultsは省略可能」ですが
どのcaseブロックにも合致しなかった挙動をあいまいにしないためにも、
省略しないようにしましょう。
意図的にbreak文を省略して、複数のブロックを続けて実行する書き方
switch文は式と値の比較を「==」演算子で行う。
「===」演算子での比較ではないので、データ型に関しては寛容であるため、
注意が必要な場合がある
switch文は、if文よりも若干だがパフォーマンスがよいというメリットがある。
これはif〜elseif文は個々の条件式をそれぞれ評価するが、
switch文では先頭の式を1度しか評価しないから。
while文の構文
while ( 条件式 ) { // 条件式がtrueである限り繰り返し実行する処理 }
do〜while文の構文
do { // 条件式がtrueである限り繰り返し実行する処理 } while ( 条件式 )
結果だけを見ると、while文もdo〜while文も同じ動きをしているように見える。
しかし、while文がループの先頭で判定をする(前置判定)のに対し、
do〜while文はループの最後に判定する(後置判定)。
後置判定は条件に関わらず必ず1回はループが実行されるが、 前置判定では、条件次第では1回もループが実行されないことがある。
for文の構文
for ( 初期化式; ループ継続条件式; 増減式 ) { //ループ内で実行する処理 }
これは正しい書き方。
PHPは以下のような式でも実行してしまい、無限ループになる。
for ( $i=1; ; $i++) { 〜 } //ループ継続条件式を省略 for ( ; ; ) { 〜 } //全ての式を省略
ループ継続条件式が省略されると、for文は無条件にtrueとなみなすため。
カンマを利用することで、初期化式、ループ継続条件式、増減式に複数の式を指定することもできる。
foreach分の構文
foreach ( 配列 as 値変数 ) { //ループ内で実行する処理 }
foreach ( 配列 as キー変数 => 値変数 ) { //ループ内で実行する処理 }
while、do〜while、for、foreach文では、あらかじめ決められた終了条件を満たしたタイミングでループを終了する。
しかし、処理によっては終了条件に関わらず、特定の条件を満たしたところで強制的にループを中断したい場合がある。
そのような場合には、ループを制御するbreak、continueを使う。
ネストされたループの中でbreak、continueは
デフォルトでは最も内側のループを脱出、スキップする。
以下のような構文で、脱出、スキップする階層を指定できる。
break ループ階層 continue ループ階層
switch文の中では、continueはbreakと同じ動きをする。
※switch文は挙動の上では条件分岐構文だが、
PHPの中では繰り返し構文として扱われる
他にも、return、require、include、try〜catchなどの命令制御文があるが、
これらはまた後日扱う
goto文を使うことによって、スクリプトの処理を他に移動することができる。
for ($i=1; $i<=10; $i++) { for ($j=1; $j<=10; $j++) { $result = $i * $j; if ($result > 40) { goto end; } echo "{$result} "; } echo "<br />"; } end:
※ただし、goto文はどこにでも移動できるわけではない 以下のような場合には使えない
※PHP5.3から対応
参考資料