第5章 制御構造

PHPにおける制御構造は、プログラムの流れを制御します。制御構造には条件文やループなどが含まれます。以下にそれぞれの例を示します。

if文

条件が真の場合にのみ実行されます。

$temperature = 20;

if ($temperature < 15) {
    echo "It's too cold.";
} elseif ($temperature > 30) {
    echo "It's too hot.";
} else {
    echo "The temperature is just right.";
}

上記のコードでは、変数$temperatureの値によって表示されるメッセージが変わります。


switch文

一連の値に対して条件を設定します。

$day = "Tuesday";

switch ($day) {
    case "Monday":
        echo "Start of the work week.";
        break;
    case "Friday":
        echo "End of the work week.";
        break;
    default:
        echo "Regular work day.";
}

上記のコードでは、変数$dayの値によって表示されるメッセージが変わります。


forループ

指定された回数だけコードブロックを繰り返します。

for ($i = 0; $i < 5; $i++) {
    echo $i;
}

上記のコードは、0から4までの数字を表示します。


whileループ

条件が真の間、コードブロックを繰り返します。

$i = 0;

while ($i < 5) {
    echo $i;
    $i++;
}

上記のコードも、0から4までの数字を表示します。


foreachループ

配列の各要素に対してコードブロックを繰り返します。

$fruits = array("apple", "banana", "cherry");

foreach ($fruits as $fruit) {
    echo $fruit;
}

上記のコードは、配列$fruitsの各要素を表示します。


break

breakはfor、foreach、while、switchなどの制御構造を中断します。以下にbreakの使用例を示します。

for ($i = 0; $i < 10; $i++) {
    if ($i == 5) {
        break;
    }
    echo $i;
}

上記のコードは、0から4までの数字を表示します。$iが5になるとbreakによりループが中断されます。


continue

continueは制御構造の現在のイテレーションをスキップし、次のイテレーションに進みます。以下にcontinueの使用例を示します。

for ($i = 0; $i < 10; $i++) {
    if ($i == 5) {
        continue;
    }
    echo $i;
}

上記のコードは、0から4まで、そして6から9までの数字を表示します。$iが5になるとcontinueによりその時点での出力がスキップされ、次のイテレーションに進みます。


無限ループ

無限ループはプログラムが終了しないループで、通常はバグまたは誤った設計により発生します。以下に無限ループの例を示します。

while (true) {
    echo "This is an infinite loop!";
}

無限ループはシステムリソースを不必要に消費し、プログラムが応答しなくなる原因となるため注意が必要です。ループの条件やループ内での変数の更新には常に注意を払うことが重要です。

無限ループが有効に使用される状況は、実際にはそれほど多くありませんが、いくつかの特定の状況ではそれが最善の選択肢となることがあります。

以下に、無限ループが適切に使用される一部の事例を示します。


イベントリスナー

サーバーサイドのプログラムが新しいクライアント接続や入力を待機している場合、無限ループを使用することは理にかなっています。このような状況では、プログラムは新しいイベントが発生するまでループ内で待機し、それが発生したら適切なアクションを実行します。

while (true) {
    // クライアントからの新しい接続をチェック
    $client = $server->checkForNewConnections();

    // 新しい接続がある場合、何らかのアクションを実行
    if ($client) {
        $server->handleNewConnection($client);
    }
}


バックグラウンドタスクの監視と管理

バックエンドで実行されるプログラムは、通常、特定のタスク(例えば、メールの送信、データのクリーニング、レポートの生成など)を定期的に実行します。これらのプログラムは特定の時間間隔を設定し、その間隔が経過するたびに必要なタスクを実行する無限ループを使用することがあります。

while (true) {
    // バックグラウンドタスクを実行
    $taskManager->runPendingTasks();

    // 実行間隔を設定(ここでは60秒)
    sleep(60);
}


練習問題1.

ユーザーから入力された数値が偶数か奇数かを判定するプログラムを作成してください。もし偶数であれば「この数字は偶数です。」と表示し、奇数であれば「この数字は奇数です。」と表示してください。


練習問題2.

1から10までの数値を表示するプログラムを作成してください。各数値は改行して表示してください。


練習問題3.

ユーザーから入力された季節名(春、夏、秋、冬)に対して、その季節の特徴を表示するプログラムを作成してください。例えば、「春」が入力されれば、「花が咲く季節です。」と表示します。