Lesson 8

構文

Lesson 8 Chapter 1
条件分岐 if

Lesson8では様々な構文について学習を行っていきます。各構文の存在は開発を行う上で使用を必須としていたり、より簡潔にまとめる為の利便性を備えています。

条件分岐とは

条件によって実行する処理を分岐する条件式のことを指します。例えば、結果がAであればAの処理を実行し、結果がBであればBの処理を実行したいなど、状況に応じて実行したい処理を分けたい際に使用していきましょう。chapter1ではその条件分岐の1つでもあるif文について学習していきましょう。

if文とは

「もし〜だったら処理を実行する」そんな状況の時にとても役に立つ構文になります。

ifの構文

if(条件式){
  // 条件式がTRUEの場合に実行される処理
}

if文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-1 > index.php

index.php
<?php
$weather = "晴れ";

if($weather == "晴れ"){
  echo "外へ出かける。";
}

解説

  • 変数$weatherに「晴れ」を代入。
  • 条件式は「$weather == "晴れ"」とする。$weatherの中身が「晴れ」であればif文の処理が実行され、「外へ出かける。」のメッセージがブラウザに出力される。

このようにifの条件式に設定した「$weather」と「晴れ」を比較演算子で比較し、等しければtrueとなり、if文の中に記述した処理が実行されます。等しくない場合はfalseとなりif文に記述した処理は実行されません。

if文の実行結果を確認

それではブラウザの表示を確認してみましょう。

index.php
<?php
$weather = "晴れ";

if($weather == "晴れ"){
  echo "外へ出かける。";
}
出力結果
外へ出かける。

条件式がtrueだった為、if文の処理が実行されました。

falseの場合

それではFALSEの場合も確認してみましょう。下記のように記述を変更しましょう。

index.php
$weather = "晴れ";

// 変更
if($weather == "雨"){
  echo "外へ出かける。";
}
// 追加
echo "外へ出かけない。";

先ほどは$weatherが晴れの場合、に対し雨の場合と条件式を変更しました。

ブラウザの表示を確認をしてみましょう。

出力結果
外へ出かけない。

条件式がFALSEと判定された為、if文の処理は実行されませんでした。

if文のまとめ

条件式がTRUEと判定された場合のみ、if文の処理が実行される。

else

続いてif文と同時に使用することが可能な「else」について学んでいきます。elseとは条件に一致した場合に実行されるifに対し、条件に一致しなかった場合に実行される処理の部分を指します。

elseの構文

if(条件式){
  // 条件式がTRUEの場合に実行される処理
}else{
  // 条件式がFALSE場合に実行される処理
}

elseの書き方

それでは新たに例文を記述していきましょう。

index.php
$old = 17;

if($old > 20){
  echo "20歳以上です。";
}else{
  echo "20歳未満です。";
}

解説

  • 「>(大なり)」はPHPの比較演算子の一つ。
  • 条件式は「$old > 20」、$oldより20の方が小さい数字であればTRUEと判定されif文の処理が実行。FALSEと判定されればelse文の処理が実行される。

elseは「どれにも当てはまらない場合の処理」として実行されるので$oldよりも20という数字が小さければif文が実行され、それ以外はelse文の処理が実行される仕組みとなっています。

elseの動作を確認

ブラウザの表示を確認してみましょう。

出力結果
20歳未満です。

$oldよりも20は小さい数字ではない為、elseが実行されました。

else文のまとめ

条件式がどれにも当てはまらない場合に処理が実行される。

elseif

elseに続いてif文と同時に使用することが可能な「elseif」について学んでいきます。elseifを使用することでifで設定した条件とは別の条件を複数設けることが可能です。

elseifの構文

if(条件式){
  // 条件式がTRUEの場合に実行される処理
}elseif(条件式){
  // 条件式がTRUE場合に実行される処理
}

elseifの書き方

それでは新たに例文を記述していきましょう。

index.php
$old = 25;

if($old <= 20){
  echo "20歳以下です。";
}elseif($old >= 20 && $old <= 65){
  echo "20歳以上、65歳以下です。";
}else{
  echo "66歳以上です。";
}

解説

  • 「<=(小なりイコール)」と「>=(大なりイコール)」はPHPの比較演算子。
  • if文の条件式は「$old <= 20」、$oldが20以下の数字であればTRUEと判定されif文の処理が実行。FALSEと判定されればelseif文の判定に移動する。
  • 「&&」はPHPの論理演算子、右辺と左辺の条件式両方がTRUEであればTRUEとなる。
  • elseif文の条件式は「$old >= 20 && $old <= 65」、$oldが20以上かつ$oldが65以下であればTRUEとなる。
  • どれにも当てはまらない場合はelse文の処理が実行される。

簡潔にまとめると条件式を以下の流れで判定していき、一致する部分の処理が実行されます。

if ・・・ $oldが20以上かどうか判定。

elseif ・・・ $oldが20以上かつ65歳以下かどうか判定。

else ・・・ どれにも当てはまらない場合。

elseifの動作確認

ブラウザの表示を確認してみましょう。

出力結果
20歳以上、65歳以下です。

基本的にプログラムは上から順に処理が実行されます。まずif文の判定を行いFALSEだった為、次のelseif文が判定され結果がTRUEとなりelseif文の処理が実行されました。

elseif文のまとめ

if文の他に条件式を追加したい場合にelseif文を使用する。

注意

if文とelseif文は条件式を設定するため()を使用しますが、else文の場合は「どれにも当てはまらない場合」となるので()をつけないように注意しましょう。

まとめ

if

if文のまとめ

条件式がTRUEと判定された場合のみ、if文の処理が実行される。

else

else文のまとめ

条件式がどれにも当てはまらない場合に処理が実行される。

elseif

elseif文のまとめ

if文の他に条件式を追加したい場合にelseif文を使用する。

Lesson 8 Chapter 2
条件分岐 switch

switch文とは

続いてswitch文を学んでいきましょう。こちらもif文に続き、条件分岐の一つになります。 switch文の特徴としては条件に応じて処理を分けたい時に適した構文です。if文と似ていますが、switch文のメリットとしては条件式が増えた場合、if文に比べスマートに記述することができる為、見やすいプログラムとなります。

switchの構文
switch(値){

  case 条件式:
    // 処理
    break;

  case 条件式
    // 処理
    break;

}

switch文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-2 > index.php

index.php
$fruit = "みかん";

switch($fruit){

  case "りんご":
    echo "りんごです。";
    break;

  case "バナナ":
    echo "バナナです。";
    break;

  case "みかん":
    echo "みかんです。";
    break;

}

解説

  • $fruitにみかんを代入し判定。
  • $fruitの中身が一致する部分の処理が実行。
  • 条件式がTRUEの場合は処理を終了させる為、breakを使用。

$fruitの値とcaseに書かれた値を判定していき、一致した部分の処理が実行されます。又、breakは「caseの処理が実行された場合にswitch文の処理を終了」することを意味する為、基本的には記述するようにしましょう。

switch文の実行結果を確認

それではブラウザの表示を確認してみましょう。

出力結果
みかんです。

$fruitの中には「みかん」を代入していたので、$fruitとcaseが一致する処理が実行されました。

defaultを追加する

switch文の中で使用可能な「default」について学習していきます。defaultとは「どれにも当てはまらない場合」として実行されます。if文で学習したelseと同じ役割をしてくれます。

defaulの書き方

index.php
$fruit = "メロン";

switch($fruit){

  case "りんご":
    echo "りんごです。";
    break;

  case "バナナ":
    echo "バナナです。";
    break;

  case "みかん":
    echo "みかんです。";
    break;

  default:
    echo $fruit."です。";

}

このようにdefaultはswitch文の一番最後に記述します、この時breakの記述は不要になります。又、switch文内でdefaultを複数記述しないようにしましょう。

defaultの動作確認

それではブラウザを確認してみます。

出力結果
メロンです。

switch文でcaseと一致するものが存在しなかった為、defaultが実行されました。このように「どれにも一致しない場合の処理」を追加しておくと想定外な事が起きた場合でもエラーをスローすることがなくなる為、システムとしてのクオリティも上げることができます。

まとめ

switch文のまとめ

  • switch()の中には判定したいものを代入する
  • caseは条件式を設定し、判定するものと一致していれば処理が実行される
  • breakをあえて使用しないケースもあるが、基本的には処理の最後にbreakを使用し、ループを終了させる
  • defaultは一番最後の行に設置し、どの条件にも当てはまらない場合に実行される。
  • defaultにbreakは不要。
  • 1つのswitch文で複数のdefaultは使用できない。

Lesson 8 Chapter 3
ループ処理 while

ループ処理とは

ある一定回数、あるいは条件を満たすまで同じ処理を複数回繰り返すことが可能な構文です。又、ループ処理は繰り返し処理とも呼ばれます。chapter3ではループ処理の一つであるwhile文について学習していきましょう。

while文とは

while文は「〜になるまで」のように繰り返す回数が不明確な状況の時にとても役に立つ構文であり、条件式がtrueである限り実行され続けます。

whileの構文

while(条件式){
  // 条件式がTRUEの場合に実行される処理
}

while文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-3 > index.php

下記のwhile文は$countに代入されている数字「1が5になるまで」ループする処理になります。

index.php
<?php
$count = 1;

while($count <= 5){
  echo $count . "回目の繰り返し処理<br>";

  $count++;
}

解説

  • 変数$countには数字の1を代入。
  • 条件式は「$count <= 5」、$countに代入されている数字が5以下の間、ループ処理を実行。
  • 増減式「$count++」、1回の繰り返し処理の最後に「$count + 1」を行う。

Lesson5で学習した加算子を処理の一番最後で記述しているため、1回のループの度に$countへ+1していく仕組みとなっています。

while文の実行結果を確認

それではブラウザの表示を確認してみましょう。

出力結果
1回目の繰り返し処理
2回目の繰り返し処理
3回目の繰り返し処理
4回目の繰り返し処理
5回目の繰り返し処理

$countが5になるまではtrueと判定されるまでループ処理が実行されました。$countが6の場合は条件式がfalseになるので繰り返し処理が終了しています。

while文を使用する上での要注意事項

無限ループに注意

加算子、減算子のような増減式($count++)を処理に組み込んでいない場合、trueと判定され続け永遠に処理が実行され続けてしまいます。PCにも大きく負荷がかかりますので注意しましょう。

実際に試す必要はありませんが無限ループを見てみましょう。

index.php
$count = 1;

while($count <= 5){
  echo $count . "回目の繰り返し処理<br>";

  // $count++; コメントアウト
}

ブラウザの表示を確認をしてみます。

出力結果
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
1回目の繰り返し処理
...
                      

永遠と1回目の処理が実行されていることがわかります。

while文のまとめ

  • 条件式がTRUEの間は処理が実行され続ける。
  • 不明確な回数を実行したい時に適している繰り返し処理。
  • 無限ループが起きないよう注意する。

while文は最終的にFALSEになるよう心がけることで無限ループの回避ができますが、強制的に処理を終了する方法もあるので以下でご紹介します。

break

強制的に処理を終了させる「break」について学習していきます。こちらはwhile文中で使用することが可能です。

構文
<?php

while(式){
  // 処理
  if(式){
    break;
  }
}

breakの書き方

index.php
<?php
$count = 1;

while($count <= 5){
  echo $count . "回目の繰り返し処理<br>";

  $count++;

  // 追加
  if($count == 3){
    break;
  }
}

$countが3だった場合、処理を終了するように、while文の中でif文を設置しました。このようにif文はあらゆる場面で使用が可能です。

breakの動作確認

それでは実際にブラウザ上ではどうなっているのか確認してみます。

出力結果
1回目の繰り返し処理
2回目の繰り返し処理

3回目以降の処理は実行されず強制的に終了されていることがわかりました。

breakのまとめ

  • 条件式の他にも、ある状況に満たした場合に強制終了させることができる。

continue

続いては任意の条件で処理を実行せずスキップさせる「continue」について学習していきましょう。こちらもwhile文中で使用することが可能です。

構文
<?php

while(式){
  // 処理
  if(式){
    continue;
  }
}

continueの書き方

index.php
$count = 0;

while($count < 5){
  $count++;

  if($count == 3){
    continue;
  }

  echo $count . "回目の繰り返し処理<br>";
}

$countが3の時に処理をスキップするようcontinueを追加しました。実際にスキップとはどのような挙動が起きているのかというと、continueが実行された場合、continue以降の処理は実行せずに処理の一番最初へ戻り、引き続き条件を満たすまでループ処理が再開される仕組みです。

continueの実行結果を確認

それでは実際にブラウザ上ではどうなっているのか確認してみます。

出力結果
1回目の繰り返し処理
2回目の繰り返し処理
4回目の繰り返し処理
5回目の繰り返し処理

3回目の処理がスキップされていることが確認できました。

continueを使用する上での注意点

continueは実行する処理の順番を工夫する必要があります。以下のケースを確認して見ましょう。

index.php
$count = 1;
while ($count <= 5) {

  // ①
  if ($count == 3) {
    continue;
  }

  // ②
  echo $count . "回目の繰り返し処理<br>";
  // ③
  $count++;
}
  • ①if文で$countが3かどうかチェックする
  • ②処理を実行する
  • ③$countに+1する

このようにif文をプログラム上記で設定してしまうと、$countが3になったタイミングで永遠とスキップされ続け、スキップから抜け出せなくなってしまうことがあります。その為、if文実行に関わらず値に変化を加えてあげることが必要となりますので、if文よりも早い段階で増減式を実行するように注意しましょう。

index.php
$count = 1;
while ($count <= 5) {
  // 増減式を移動
  $count++;

  if ($count == 3) {
    continue;
  }

  echo $count . "回目の繰り返し処理<br>";
}

continuのまとめ

  • 繰り返し処理の中で、特定の条件でスキップさせることが可能。
  • 処理を実行する順番に注意、工夫が必要。

まとめ

while文のまとめ

  • 条件式がTRUEの間は処理が実行され続ける。
  • 不明確な回数を実行したい時に適している繰り返し処理。
  • 無限ループが起きないよう増減式の設置やbreakを使用する。
  • continueの使用において処理の実行する順番に注意する。

Lesson 8 Chapter 4
ループ処理 for

for文とは

for文もループ処理の一つです。 先ほどのwhile文との違いとしては、ある程度実行回数が明確になっている際に適している構文になります。又、処理をまとめて記述することができるのも特徴の一つです。

forの構文

for(初期値; 条件式; 増減式){
  // 条件式がTRUEの場合に実行される処理
}

for文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-4 > index.php

index.php
for($count = 1; $count <= 10; $count++){
  echo $count . "回目の処理<br>";
}

解説

1箇所に処理がまとまった分、複雑にも見えると思うので分解して解説していきます。

  • $countに1を代入。「$count = 1」
  • $countが10以下の間は処理を実行する。「$count <= 10」
  • 1回のループごとに$countに+1をする。「$count++」

このようにループする条件を1箇所にまとまています。

  • 何回目からスタートするのか
  • 何回目まで実行するのか
  • いくつずつ増やしたり減らしたりするのか

という構成になっています。

for文の実行結果を確認

それではブラウザの表示を確認してみましょう。

出力結果
1回目の処理
2回目の処理
3回目の処理
4回目の処理
5回目の処理
6回目の処理
7回目の処理
8回目の処理
9回目の処理
10回目の処理

「$countの初期値は1」、「$countが10になるまで」、「$countを+1」とした結果、上記の結果となりました。

for文のまとめ

  • 実行回数がある程度明確的な時に適している。
  • 1箇所にまとめて処理を記述できるため、スマートになる。

break

強制的に処理を終了させる「break」について学習していきます。こちらはfor文中で使用することが可能です。

構文
for(条件式){

  if(条件式){
    break;
  }

}

breakの書き方

index.php
for($count = 1; $count <= 10; $count++){

  echo $count . "回目の処理<br>";

  if($count == 5){
    break;
  }

}

$countが5だった場合、処理を終了するように、for文の中でif文を設置しました。

breakの動作確認

それでは実際にブラウザ上ではどうなっているのか確認してみます。

出力結果
1回目の処理
2回目の処理
3回目の処理
4回目の処理
5回目の処理

5回で処理が終了し、6回目以降の処理は強制的に終了されていることがわかりました。

breakのまとめ

  • 条件式の他にも、ある状況に満たした場合に強制終了させることができる。

continue

続いては任意の条件で処理を実行せずスキップさせる「continue」について学習していきましょう。こちらもfor文中で使用することが可能です。

構文
for(条件式){

  if(条件式){
    continue;
  }

}

continueの書き方

index.php
for($count = 1; $count <= 10; $count++){

  if($count == 5){
    continue;
  }

  echo $count . "回目の処理<br>";

}

$countが5の時に処理をスキップするようcontinueを追加しました。continueが実行された場合、continue以降の処理は実行せずに処理の一番最初へ戻り、引き続き条件を満たすまでループ処理が再開される仕組みです。

continueの実行結果を確認

それでは実際にブラウザ上ではどうなっているのか確認してみます。

出力結果
1回目の処理
2回目の処理
3回目の処理
4回目の処理
6回目の処理
7回目の処理
8回目の処理
9回目の処理
10回目の処理

5回目の時は処理をスキップされていることが確認できました。

continuのまとめ

  • 繰り返し処理の中で、特定の条件でスキップさせることが可能。

まとめ

for文のまとめ

  • 実行回数がある程度明確的な時に適している。
  • 1箇所にまとめて処理を記述できるため、スマートになる。

Lesson 8 Chapter 5
ループ処理 foreach

foreach文とは

foreach文も繰り返し処理の一つです。 foreach文の特徴としては配列を操作する際に適した繰り返し処理になります。 配列の中に存在する値の数分、ループ処理が実行されます。

foreachの構文
foreach(配列変数 as キー => 変数){
  // 処理
}

foreach文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-5 > index.php

$fruitsの中に3つの果物を代入した配列変数を用意しました。

index.php
$fruits = ["りんご", "バナナ", "みかん"];

foreach($fruits as $key => $fruit){
  echo $key . "番目の果物は" . $fruit . "です<br>";
}

解説

  • $fruitsは複数の値を代入しているので配列。
  • $keyは配列の値に付与される番号で0から付与される。キーやインデックス番号と呼ぶ。
  • $fruitは配列から一つずつ値を取り出す為の変数。命名は任意。

$fruitsが果物全てをまとめた配列変数で$fruitは一つ一つの果物を扱う際に使用する変数になります。

foreach文の実行結果を確認

それではブラウザの表示を確認してみましょう。

出力結果
0番目の果物はりんごです
1番目の果物はバナナです
2番目の果物はみかんです

このように配列だった値を全て表示させることができました。又、3行分実行されているということは、配列の中に存在する値の数だけループ処理が実行されたということも確認できました。

foreach文のまとめ

  • 配列変数は複数形、配列は単数形として命名してあげると良い。
  • foreach(配列変数 as キー => 変数)のキー部分は不要であれば省略することも可能。foreach(配列変数 as 配列)。
  • 配列の中に含まれる値の数だけ繰り返し処理が実行される。

break

強制的に処理を終了させる「break」について学習していきます。こちらはforeach文中で使用することが可能です。

構文
foreach(条件式){

  if(条件式){
    break;
  }

breakの書き方

index.php
$fruits = ["りんご", "バナナ", "みかん"];

foreach($fruits as $key => $fruit){

  if($fruit == "バナナ"){
    break;
  }

  echo $key . "番目の果物は" . $fruit . "です<br>";

$fruitがバナナだった場合、処理を終了するように、foreach文の中でif文を設置しました。

breakの動作確認

出力結果
0番目の果物はりんごです

$fruitがバナナの時は処理が実行されず、ループ処理が終了していることが確認できました。

breakのまとめ

  • 条件に満たした場合に処理を強制終了させることができる。

continue

続いては任意の条件で処理を実行せずスキップさせる「continue」について学習していきましょう。こちらもforeach文中で使用することが可能です。

構文
foreach(条件式){

  if(条件式){
    continue;
  }

continueの書き方

index.php
$fruits = ["りんご", "バナナ", "みかん"];

foreach($fruits as $key => $fruit){

  if($key == 1){
    continue;
  }

  echo $key . "番目の果物は" . $fruit . "です<br>";
}

$keyが1の時に処理をスキップするようcontinueを追加しました。continueが実行された場合、continue以降の処理は実行せずに処理の一番最初へ戻り、引き続き条件を満たすまでループ処理が再開される仕組みです。

continueの実行結果を確認

出力結果
0番目の果物はりんごです
2番目の果物はみかんです

if文を用いることで条件に一致した場合に処理をスキップさせることが可能です。又、このように値ではなくキーを指定することもできます。

continuのまとめ

  • 繰り返し処理の中で、特定の条件でスキップさせることが可能。
  • 処理を実行する順番に注意、工夫が必要。

まとめ

foreach文のまとめ

  • 配列変数は複数形、配列は単数形として命名してあげると良い。
  • キー部分は不要であれば省略することも可能。foreach(配列変数 as 配列)。
  • 配列の中に含まれる値の数だけ繰り返し処理が実行される。
  • 値だけでなくキーを基に配列を操作することも可能。

Lesson 8 Chapter 6
match式

match式とは

matchは先ほど学習した条件分岐のswitch文と役割が非常に似ています。 switch文に比べ、より厳密なチェックを行ってくれたりbreakが不要な為、記述漏れなどミスを回避しやすいのが特徴です。

matchの構文
match(値){
条件式 => 処理,
条件式 => 処理,
条件式 => 処理,

}

match式の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-6 > index.php

index.php
$fruit = "バナナ";

$message = match($fruit){
  "りんご" => "変数の中身はりんごです。",
  "バナナ" => "変数の中身はバナナです。",
  "みかん" => "変数の中身はみかんです。",
};

echo $message;

判定したい値をmatch式の引数に代入し、一致するキー(りんご、バナナ、みかん)の処理が実行される流れになっています。

match式の実行結果を確認

それではブラウザの表示を確認してみましょう。

出力結果
変数の中身はバナナです。

$fruitの中には「バナナ」を代入していたので、値が一致する2行目の処理が実行されました。

defaultを追加する

続いては条件のどれにも当てはまらない場合の処理「default」について学習していきます。switch文と違い、matchは一致するものがない場合はエラーが出力される為、予期せぬ場合も考慮して入れておくといいでしょう。

defaultの書き方

index.php
$fruit = "メロン";

$message = match($fruit){
  "りんご" => "変数の中身はりんごです。",
  "バナナ" => "変数の中身はバナナです。",
  "みかん" => "変数の中身はみかんです。",
  default => "どれにも当てはまらない。",
};

echo $message;

どれにも当てはまらない場合の処理として、match式内の最下部にdefaultを設置します。switch文同様、複数の記述は不可となります。

defaultの動作確認

それではブラウザを確認してみます。

出力結果
どれにも当てはまらない。

$fruitの値はどの条件式にも一致しなかった為、defaultが実行されました。上記でも説明したようにswitch文と違って、一致するものがない場合はエラーとなる為、defaultは基本使用していきましょう。

match式で厳格な値の確認

冒頭で厳格なチェックが可能とお伝えしました。具体的にどのように厳格なのかを解説していきます。

index.php
$number = 2;

$message = match ($number) {
  "1" => "numberは1です。",
  "2" => "numberは2です。",
  "3" => "numberは3です。",
  default => "一致するものが存在しません。",
};

echo $message;
出力結果
一致するものが存在しません。

このように$numberの値が2にも関わらず、2の条件式は実行されずdefaultが実行されました。match式は値の型も同時に判定するため、変数の値と条件式に設定している値の型まで一致させる必要があります。今回は$numberが整数型に対し、条件式が文字列だった為、defaultが実行されています。

まとめ

matchのまとめ。

  • match()の中には判定したいものを代入する。
  • 値と一致している条件式が実行されたあとはループが終了する。
  • breakを使用しない為、無限ループが起こらない。
  • 型の判定も同時にしてくれる為、switch文に比べ厳密な判定が可能。
  • どの条件式にも当てはまらない場合はエラーになる。

Lesson 8 Chapter 7
declare

declare文とは

declare文は指定したディレクティブの処理を実行するものです。又、ディレクティブとは指示文のようなものです。

ディレクティブ「strict_types」

こちらは厳格に型のチェックを行うことが可能なディレクティブです。

declareの構文
declare(strict_types=1)

declare文を使用しない場合

まずはdeclare文を使用しない場合の記述から動作確認をしていきましょう。 下記の構成でindex.phpを作成しVScodeで開いてください。

XAMPP > htdocs > Lesson8-7 > index.php

index.php
function declareTest(int $x){
  var_dump($x);
}

declareTest("4");

以下が処理の流れになります。

  • ①declareTest("4")が実行される。
  • ②function declareTest(int $x)の$xには4が代入されstring型からint型に変換される。
  • ③var_dump($x)が行われる。

それではブラウザを確認してみます。

出力結果
int(4)

送った時点では文字列型だった4が整数型の4に変化していることが確認できます。これは、引数でintと指定している為、代入されたタイミングで型が変換されました。これが通常の処理の流れになります。

declare文 strict_typesの定義

先ほどの記述に1行追加します。最上部へdeclare(strict_types=1)を追加しましょう。

index.php
<?php
declare(strict_types=1);

function declareTest(int $x){
  var_dump($x);
}

declareTest("4");

declare文 strict_typesの動作確認

処理は先ほどと変更はないので、このままブラウザの確認を行ってみます。

出力結果
Fatal error: Uncaught TypeError: declareTest(): Argument #1 ($x) must be of type int ...

「declareTest()に送る値はint型である必要があります。」とType(型)のエラーが返ってきています。declare文を適用する前はdeclareTest()に引数が渡ったタイミングで型を変換していましたが、strict_typesにより厳格に型を判定しているため、送る時点で整数型でなければいけなくなりました。それらを踏まえ修正し、再度確認していきます。

index.php
<?php
declare(strict_types=1);

function declareTest(int $x){
  var_dump($x);
}

// 文字列から整数へ修正
declareTest(4);
出力結果
int(4)

無事処理が実行されました。このようにdeclare(strict_types=1)を仕様する際は送り手と受け取り手の型を一致させる必要があるので覚えておきましょう。

declare(strict_types=1)のまとめ

  • 型を厳格にチェックすることができる
  • declare文は処理の一番上に記述する。処理の途中で仕様するとエラーが発生する

ディレクティブ「tick」

tickディレクティブとは設定しておくことでイベントが発生するごとに関数を実行することが可能になります。

declareの構文
declare(tick=1)

declare文 tickの定義

それでは実際にコードを記述していきます。

index.php
<?php
declare(ticks=1);

function tickTest()
{
    echo "こんにちは<br>";
}

register_tick_function('tickTest');

$firstName = "テスト";
$lastName = "太郎";

var_dump($firstName.$lastName);

PHPではregister_tick_functionという関数が用意されており、こちらも同時に使用しながら確認していきます。

  • 1回目のイベント:register_tick_function('tickTest');
  • 2回目のイベント:$firstName = "テスト";
  • 3回目のイベント:$lastName = "太郎";
  • 4回目のイベント:var_dump($firstName.$lastName);

register_tick_functionの使い方

イベントが実行される度に実行したい関数をregister_tick_function関数の引数に入れます。

index.php
register_tick_function('tickTest');

declare文 tickの確認

それではブラウザを確認してみます。

出力結果
こんにちは
こんにちは
こんにちは
string(15) "テスト太郎" こんにちは

tickTest関数は「こんにちは」を出力する関数ですが、register_tick_function関数の引数に入れたことによりイベントが実行される度に、tickTest関数も実行されます。上記で4回のイベントが実行されブラウザのような結果になりました。

declare(tick=1)のまとめ

  • tickでイベント毎に関数を実行することができる
  • 実行対象の関数はregister_tick_function関数を使用して指定する

Lesson 8 Chapter 8
return

return文とは

return文はechoと似ており、関数では基本的にreturnを使用します。returnが実行されたタイミングで関数内の処理が終了し、その結果を呼び出し元へreturnする仕組みです。

returnの構文
<?php
function 関数(){

  return データ型;

}

echo 関数;

return文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-8 > index.php

index.php
function HelloMessage(){
  return "Hello";
}

echo HelloMessage();

解説

  • 関数HellowMessageを定義。HelloMessage関数は文字列Helloを返す処理。
  • echo HelloMessage()で関数を呼び出す。

return文の実行結果を確認

それではブラウザの表示を確認して見ましょう。

出力結果
Hello

このようにHelloMessage関数の実行結果をreturnし出力することに成功しました。

echoではなくreturnのメリット

これまで使用してきたechoと似ていますが、echoは実行されたタイミングで出力するのに対し、returnは呼び出し元へ一度返します。つまり呼び出し元の書き方次第では利点が多くあります。下記の例文はreturnであるからこそ実現可能な処理になります。

index.php
<?php
function numberThird(){
  return 3;
}

function numberFive(){
  return 5;
}

echo numberThird() + numberFive();
出力結果
8

このように二つの関数の結果を呼び出し元にreturnし、合計値をechoする処理の実現が可能です。簡単に説明すると、echoはその場で結果を出力するのに対し、returnは呼び出すタイミングで実行されるので、処理実行のタイミングを操作することができます。

注意

returnではなくechoで実行した場合、関数が呼び出されたタイミングで結果を出力してしまうため、合計値はechoできません。

まとめ

returnのまとめ

  • returnが実行されたタイミングで呼び出し元へデータ型を返す。
  • 呼び出し元はreturnされた結果を実行せずに保持できる為、実行するタイミングを調整したり他の処理と組み合わせて実行することも可能。
  • 都合の良い点が多いため、基本的に関数内ではechoではなくreturnを使用するようにする。

Lesson 8 Chapter 9
require

require文とは

外部ファイルを読み込んで実行したい場合に使用される関数です。今後記述していくコードが増えたりした場合、一つのファイルに全て書き込むことは修正や追加などを想定すると、あまり現実的ではありません。役割毎にファイルを分割し、必要に応じてファイルを読み込むことできる状態を意識することが大切です。

requireの構文
require("ファイルのパス");

require文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpとuser.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-9 > index.php

index.php
<?php
require("user.php");

echo $userName;

index.php解説

  • require("user.php")で外部ファイルuser.phpを読み込む。
  • echo $userNameで外部ファイルuser.phpに定義されている変数を出力する。

XAMPP > htdocs > Lesson8-9 > user.php

user.php
<?php
$userName = "テスト太郎";

user.php解説

  • index.phpで使用する為の変数$userNameを定義する。

require文の動作を確認

それではブラウザを確認してみましょう。

出力結果
テスト太郎

このように外部ファイルuser.phpで定義した変数をindex.phpで呼び出しことに成功しました。

複数の外部ファイルを読み込む

ファイルは複数読み込むことも可能です。続いてplace.phpを作成しましょう。

XAMPP > htdocs > Lesson8-9 > place.php

place.php
<?php
$place = "東京";

place.php解説

  • index.phpで使用する為の変数$placeを定義する。

呼び出し方は先ほどのuser.phpと変わりません。place.phpの記述をindex.phpに追加し、修正しましょう。

index.php
<?php
require("user.php");
require("place.php");

echo $userName . "は" . $place . "にいきます。";

ブラウザの結果を確認してみます。

出力結果
テスト太郎は東京にいきます。

このように複数のファイルを呼び出し、値を使用することができました。

注意

requireで外部ファイルを読み込む前に読み込み先の変数などを使用するとエラーが発生します。基本的にrequireはページの上部で読み込んでおくようにしましょう。

まとめ

requireのまとめ

  • 外部ファイルを読み込み、内部の変数などを使用することができる。
  • requireはページ上部で読み込んでおく。
  • requireは複数使用することができる。
  • エラーが起きた場合は処理処理が停止する。

Lesson 8 Chapter 10
include

include文とは

include文もrequireと同様、外部ファイルを読み込んで実行したい場合に使用される関数で使用方法も全く同じになります。

includeの構文
<?php
include("ファイルのパス");

include文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpとuser.php、place.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-10 > index.php

index.php
<?php
require("user.php");
require("place.php");

echo $userName . "は" . $place . "にいきます。";

index.php解説

  • include("user.php")で外部ファイルuser.phpを読み込む。
  • include("place.php")で外部ファイルplace.phpを読み込む。
  • echo $userNameで外部ファイルuser.phpに定義されている変数を出力する。
  • echo $placeで外部ファイルplace.phpに定義されている変数を出力する。

XAMPP > htdocs > Lesson8-10 > user.php

user.php
<?php
$userName = "テスト太郎";

user.php解説

  • index.phpで使用する為の変数$userNameを定義する。

XAMPP > htdocs > Lesson8-10 > place.php

place.php
<?php
$place = "東京";

place.php解説

  • index.phpで使用する為の変数$placeを定義する。

include文の動作を確認

ブラウザを確認してみます。

index.php
<?php
require("user.php");
require("place.php");

echo $userName . "は" . $place . "にいきます。";
出力結果
テスト太郎は東京にいきます。

このように複数のファイルを呼び出し、値を使用することが可能できました。

requireとincludeの違い

includeとrequireの違い

require

  • エラー発生時:致命的(Fatal)なエラー。処理が停止する。

include

  • エラー発生時:警告(Warning)。処理は継続する。

使い分けについてはエラー発生時、処理を停止したいか継続させたいかで判断してあげると良いでしょう。エラーが起きたことにより、後の処理に影響が出るのであればrequireで処理を停止し、エラーは発生したが画面表示はさせたい場合はincludeを使用します。

まとめ

includeのまとめ

  • 外部ファイルを読み込み、内部の変数などを使用することができる。
  • includeはページ上部で読み込んでおく。
  • includeは複数使用することができる。
  • エラーが起きた場合でも処理は継続する。

Lesson 8 Chapter 11
require_once

require_once文とは

require_once文とはchapter9で学習したrequire文と使用方法も処理内容も同じく外部ファイルの読み込みを行うことができます。

require_onceの構文
require_once("ファイルのパス");

require_once文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpとmessage.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-11 > index.php

index.php
<?php
require_once("message.php");

echo $message;

index.phpの解説

  • require_once("message.php")で外部ファイルのmessage.phpを読み込む。
  • 読み込み先のファイルで定義している$messageを出力する。

XAMPP > htdocs > Lesson8-11 > message.php

message.php
<?php
$message = "Hello";

message.phpの解説

  • 変数$messageを定義。

require_onceの動作を確認

それではブラウザを確認してみましょう。

出力結果
Hello

require文と同じように外部ファイルの変数を出力することができました。

requireとrequire_onceの違い

ではrequireとrequire_onceでは何が違うのか、ここから説明をしていきます。

requireとrequire_onceの違い

  • require ・・・ 同じファイルを複数回読み込むことができる。
  • require_once ・・・ 同じファイルを一度だけ読み込むことができる。

具体的にどのような違いがあるのか画面を確認しながら行っていきましょう。index.phpに処理を追加してください。

requireの場合

index.php
<?php
require("message.php");

echo $message;

// 下記3行追加
$message = "こんにちは。";
require("message.php");
echo $message;

ブラウザを確認してみます。

出力結果
Hello
Hello
                      

追加した行の1行目で「$message = "こんにちは。";」と$messageを再定義している為、ここでは値が「Hello」から「こんにちは。」へ値の上書きを行っていますが、再度requireでmessage.phpを読み込んでいるので$messageの値は「Hello」となっています。その為、ブラウザでHelloが2回出力されました。requireはこのように1度に何度も読み込むことが可能です。

require_onceの場合

requireをrequire_onceに書き換えてみましょう。

index.php
<?php
require_once("message.php");

echo $message;

$message = "こんにちは。";
require_once("message.php");
echo $message;

ブラウザを確認してみます。

出力結果
Hello
こんにちは。
                      

同じように2度message.phpを読み込む記述をしていますが、require_onceで読み込めるのは1度になるので、最初のrequire_onceだけ適用され2度目の読み込みは行われていません。よって$messageを「Hello」から「こんにちは。」への上書きが行われブラウザのような結果となりました。どちらを使い分けるかは実装する処理によって判断する必要がありますが、変数の値が変わることを想定するとrequire_onceの方が都合の良い点が多いかもしれません。

まとめ

require_onceのまとめ

  • 外部ファイルを読み込み、内部の変数などを使用することができる。
  • requireは複数回ファイルを読み込むのに対し、require_onceはファイルの読み込みが1度のみ。

Lesson 8 Chapter 12
include_once

include_once文とは

chapter10で学習したinclude文と使用方法も処理内容も同じく外部ファイルの読み込みを行うことができます。

include_onceの構文
include_once("ファイルのパス");

include_once文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpとmessage.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-12 > index.php

index.php
<?php
include_once("message.php");

echo $message;

index.phpの解説

  • include_once("message.php")で外部ファイルのmessage.phpを読み込む。
  • 読み込み先のファイルで定義している$messageを出力する。

XAMPP > htdocs > Lesson8-12 > message.php

message.php
<?php
$message = "Hello";

message.phpの解説

  • 変数$messageを定義。

include_onceの動作を確認

それではブラウザを確認してみましょう。

出力結果
Hello

include文と同じように外部ファイルの変数を出力することができました。

includeとinclude_onceの違い

ではincludeとinclude_onceでは何が違うのか、ここから説明をしていきます。

includeとinclude_onceの違い

  • include ・・・ 同じファイルを複数回読み込むことができる。
  • include_once ・・・ 同じファイルを一度だけ読み込むことができる。

具体的にどのような違いがあるのか画面を確認しながら行っていきましょう。index.phpに処理を追加してください。

includeの場合

index.php
<?php
include("message.php");

echo $message;

// 下記3行追加
$message = "こんにちは。";
include("message.php");
echo $message;

ブラウザを確認してみます。

出力結果
Hello
Hello
                      

追加した行の1行目で「$message = "こんにちは。";」と$messageを再定義している為、ここでは値が「Hello」から「こんにちは。」へ値の上書きを行っていますが、再度includeでmessage.phpを読み込んでいるので$messageの値は「Hello」となっています。その為、ブラウザでHelloが2回出力されました。includeはこのように1度に何度も読み込むことが可能です。

include_onceの場合

includeをinclude_onceに書き換えてみましょう。

index.php
<?php
include_once("message.php");

echo $message;

$message = "こんにちは。";
include_once("message.php");
echo $message;

ブラウザを確認してみます。

出力結果
Hello
こんにちは。
                      

同じように2度message.phpを読み込む記述をしていますが、include_onceで読み込めるのは1度になるので、最初のinclude_onceだけ適用され2度目の読み込みは行われていません。よって$messageを「Hello」から「こんにちは。」への上書きが行われブラウザのような結果となりました。どちらを使い分けるかは実装する処理によって判断する必要がありますが、変数の値が変わることを想定するとinclude_onceの方が都合の良い点が多いかもしれません。

まとめ

include_onceのまとめ

  • 外部ファイルを読み込み、内部の変数などを使用することができる。
  • requireは複数回ファイルを読み込むのに対し、include_onceはファイルの読み込みが1度のみ。

Lesson 8 Chapter 13
goto

goto文とは

goto文とは、処理の途中で指定先の処理(ラベル)に移動することができる構文になります。

gotoの構文
goto ラベル;

// 処理

ラベル:
// 処理

goto文の書き方

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson8-13 > index.php

index.php
<?php
goto message;

echo "こんにちは";

message:
echo "Hello";

解説

  • gotoの後に移動させたい場所messageを定義。
  • 「echo "こんにちは"」はスルーされ「echo "Hello"」が実行される。
  • 移動先はmessage:(コロン)と定義する。

goto文の動作を確認

ラベルまでの処理は実行せず処理をスキップしているようなイメージです、繰り返し処理の時に使用したcontinue(スキップ)やbreak(処理終了)と似ています。ブラウザを確認してみましょう。

出力結果
Hello

gotoを使用していなければ「こんにちは」と「Hello」がそれぞれブラウザに表示されますが、「こんにちは」が出力される前にラベル(:message)へ移動しているので表示は「Hello」のみとなりました。

goto文使用のルール

gotoの使用には制約が存在する

  • 関数やメソッドの外に移動はできない。
  • 繰り返し処理内に移動できない。
  • 上記のように制約があり、これらのルールに従わない場合はエラーとなります。

    ①関数やメソッドの外に移動してみる。

    index.php
    <?php
    function gotoTest(){
      goto message;
    
      return "こんにちは";
    }
    
    message:
    echo "Hello";
    出力結果
    Fatal error: 'goto' to undefined label 'message' in ...

    gotoTest関数内から外へ移動しようとした為エラーになりました。

    ②繰り返し処理内に移動してみる。

    index.php
    <?php
    $fruits = ["りんご", "バナナ", "みかん"];
    
    goto lemon;
    
    foreach($fruits as $fruit){
      lemon:
      echo "レモン";
    }
    出力結果
    Fatal error: 'goto' into loop or switch statement is disallowed in ...

    繰り返し処理の外部から内部へ移動しようとしたため、エラーになりました。

    まとめ

    gotoのまとめ

    • gotoとラベル(移動先)を指定することで処理を移動することができる。
    • ラベルの末尾には:(コロン)を記述する。
    • メソッドや関数の外にラベルを設置することはできない。
    • 繰り返し処理内にラベルを設置することはできない。