PHPの繰り返し処理をマスター

こんにちは、KoenigWolfです。今日の記事では、PHPでの繰り返し処理について詳しく解説します。前回はfor文について学びましたが、今回はwhile文、do-while文、break文、continue文についても説明します。

## for文の復習

前回学んだfor文の基本構造は以下の通りです。

```php
<?php
for ($i = 0; $i < 10; $i++) {
    echo "こんにちは\n";
}
?>
```

このコードは、「こんにちは」を10回出力します。

## while文

while文は、条件がtrueである限り繰り返し処理を行う構文です。構造は非常にシンプルです。

```php
<?php
$i = 0;
while ($i < 10) {
    echo "こんにちは\n";
    $i++;
}
?>
```

このコードは、for文と同様に「こんにちは」を10回出力します。

## do-while文

do-while文は、まず処理を行い、その後に条件をチェックします。したがって、条件がfalseであっても最低1回は処理が実行されます。

```php
<?php
$i = 0;
do {
    echo "こんにちは\n";
    $i++;
} while ($i < 10);
?>
```

このコードも同様に「こんにちは」を10回出力しますが、処理が最初に必ず1回実行される点が特徴です。

## break文

break文は、ループを途中で終了させるためのキーワードです。例えば、配列内にマイナスの数が含まれているかどうかを調べる場合に使用できます。

```php
<?php
$array = [1, 2, 3, -1, 5, 6];
$message = "含まれていません";

for ($i = 0; $i < count($array); $i++) {
    if ($array[$i] < 0) {
        $message = "含まれています";
        break;
    }
}

echo $message;
?>
```

このコードは、配列内にマイナスの数が含まれている場合に「含まれています」と出力します。

## continue文

continue文は、ループの残りの部分をスキップし、次の繰り返しに進むためのキーワードです。例えば、配列内の偶数の合計を計算する場合に使用できます。

```php
<?php
$array = [1, 2, 3, 4, 5, 6];
$sum = 0;

for ($i = 0; $i < count($array); $i++) {
    if ($array[$i] % 2 != 0) {
        continue;
    }
    $sum += $array[$i];
}

echo $sum; // 出力は12
?>
```

このコードは、配列内の偶数（2、4、6）の合計を計算し、12を出力します。

## foreach文

foreach文は、配列や連想配列の要素を一つずつ処理するために使用されます。

```php
<?php
$array = [1, 2, 3, 4, 5];

foreach ($array as $value) {
    echo $value . "\n";
}
?>
```

このコードは、配列の各要素を順に出力します。

### 連想配列の場合

連想配列を扱う場合、キーと値の両方を取得することも可能です。

```php
<?php
$assocArray = ["one" => 1, "two" => 2, "three" => 3];

foreach ($assocArray as $key => $value) {
    echo "$key: $value\n";
}
?>
```

このコードは、連想配列のキーと値を順に出力します。

## まとめ

PHPの繰り返し処理について学びました。for文、while文、do-while文、break文、continue文、foreach文の使い方を理解することで、より効率的にプログラムを記述することができます。次は、関数について学びます。




# PHPの関数について解説します

関数はプログラミングを理解する上で非常に重要な概念ですので、しっかり覚えていきましょう。

## 関数とは？

関数とは、あるデータを受け取ってそのデータを処理し、結果として別のデータを返すものです。この概念は数学の関数に由来しています。例えば、一次関数や三角関数などがあります。

現実世界にも関数のようなものがあります。例えば、自動販売機はお金を入れるとジュースを出してくれるので、これも一種の関数と考えることができます。

## PHPの関数

PHPの関数は大きく2つに分かれます：
1. ビルトイン関数
2. ユーザー定義関数

### ビルトイン関数

PHPには多くのビルトイン関数があり、これらはPHPにあらかじめ用意されている関数です。いくつか例を見てみましょう。

#### count関数

配列の要素数を数える関数です。

```php
<?php
$array = [1, 2, 3];
$count = count($array);
echo $count; // 3
?>
```

#### abs関数

絶対値を求める関数です。

```php
<?php
$value = -10;
$absoluteValue = abs($value);
echo $absoluteValue; // 10
?>
```

### ユーザー定義関数

ユーザー定義関数は、プログラムを書く人が自由に作ることができる関数です。関数の作り方を見ていきましょう。

```php
<?php
function add($a, $b) {
    $result = $a + $b;
    return $result;
}

$sum = add(10, 15);
echo $sum; // 25
?>
```

この関数は2つの数値を受け取って、その和を返します。

## 関数のスコープ

関数にはスコープ（有効範囲）という概念があります。PHPには3つのスコープがあります：
1. ローカルスコープ
2. グローバルスコープ
3. スーパーグローバルスコープ

ここでは、ローカルスコープとグローバルスコープについて説明します。

### ローカルスコープ

ローカルスコープとは、関数の中で定義された変数の有効範囲です。関数の外からはアクセスできません。

```php
<?php
function test() {
    $localVar = "This is local";
    echo $localVar;
}

test(); // This is local
echo $localVar; // エラー
?>
```

### グローバルスコープ

グローバルスコープとは、関数の外で定義された変数の有効範囲です。関数の中からアクセスするには `global` キーワードを使用します。

```php
<?php
$globalVar = "This is global";

function test() {
    global $globalVar;
    echo $globalVar;
}

test(); // This is global
?>
```

## 引数と戻り値

関数は引数を受け取り、戻り値を返すことができます。引数と戻り値の型を指定することもできます。

```php
<?php
function multiply(int $a, int $b): int {
    return $a * $b;
}

$result = multiply(5, 3);
echo $result; // 15
?>
```

## void関数

何もデータを返さない関数は、`void` 型の関数と呼ばれます。

```php
<?php
function sayHello(): void {
    echo "Hello!";
}

sayHello(); // Hello!
?>
```

## 演習問題

1. **「はい」という文字列をコンソールに出力する関数を作成してください。**

```php
<?php
function sayHai(): void {
    echo "はい";
}

sayHai(); // はい
?>
```

2. **2つの数値を受け取り、大きい方の数値を返す関数を作成してください（PHPのビルトイン関数を使わないでください）。**

```php
<?php
function maxValue(int $a, int $b): int {
    return ($a > $b) ? $a : $b;
}

echo maxValue(10, 20); // 20
?>
```

関数について理解が深まったでしょうか？
次はさらにPHPの深い部分を学んでいきますので、引き続きご覧ください。



# PHPのクラスとオブジェクトについて解説します

これでPHPプログラミング講座の最後となります。

## クラスとオブジェクトとは？

PHPはクラスベースのオブジェクト指向プログラミングをサポートしています。クラスベースのオブジェクト指向とは、クラスという構造を使ってプログラムを構築する方法です。クラスは、ある概念を表現するためのテンプレートのようなものです。オブジェクトはそのクラスから生成される具体的なインスタンスです。

### クラスの定義

クラスを定義するためには `class` キーワードを使います。

```php
<?php
class Human {
    public $name;
    public $birthday;
    public $gender;

    public function __construct($name, $birthday, $gender) {
        $this->name = $name;
        $this->birthday = $birthday;
        $this->gender = $gender;
    }

    public function walk() {
        echo $this->name . " is walking.<br>";
    }

    public function eat() {
        echo $this->name . " is eating.<br>";
    }
}
?>
```

この例では、`Human` クラスを定義しています。`Human` クラスには3つのプロパティ（`name`, `birthday`, `gender`）と2つのメソッド（`walk`, `eat`）があります。`__construct` メソッドはコンストラクタと呼ばれ、オブジェクトが生成されるときに自動的に呼び出されます。

### オブジェクトの生成と利用

定義したクラスからオブジェクトを生成し、利用してみましょう。

```php
<?php
$person = new Human("John Doe", "1990-01-01", "male");
$person->walk(); // John Doe is walking.
$person->eat();  // John Doe is eating.
?>
```

`new` キーワードを使ってクラスからオブジェクトを生成します。生成したオブジェクトのメソッドを矢印演算子（`->`）を使って呼び出すことができます。

### アクセス修飾子

PHPでは、プロパティやメソッドに対してアクセス修飾子を設定できます。主な修飾子は `public`, `protected`, `private` です。

- `public`: どこからでもアクセス可能
- `protected`: 同じクラスや継承クラスからのみアクセス可能
- `private`: 同じクラスからのみアクセス可能

```php
<?php
class Human {
    private $name;
    protected $birthday;
    public $gender;

    public function __construct($name, $birthday, $gender) {
        $this->name = $name;
        $this->birthday = $birthday;
        $this->gender = $gender;
    }

    public function getName() {
        return $this->name;
    }
}
?>
```

この例では、`name` プロパティは `private` として定義されていますので、クラス外から直接アクセスすることはできません。`getName` メソッドを使って `name` プロパティの値を取得することができます。

## 演習問題

### 演習1: 「はい」と出力する関数

```php
<?php
function sayHai(): void {
    echo "はい";
}

sayHai(); // はい
?>
```

### 演習2: 大きい方の数値を返す関数

```php
<?php
function maxValue(int $a, int $b): int {
    return ($a > $b) ? $a : $b;
}

echo maxValue(10, 20); // 20
?>
```

### 演習3: BMI計算クラスの実装

次のコードを完成させてください。

```php
<?php
class BMI {
    public $height;
    public $weight;
    public $bmi;

    public function __construct($height, $weight) {
        $this->height = $height;
        $this->weight = $weight;
        $this->bmi = 0;
    }

    public function calculateBMI() {
        $this->bmi = $this->weight / (($this->height / 100) ** 2);
        return $this->bmi;
    }
}

$bmiCalculator = new BMI(170, 70);
echo "BMI: " . $bmiCalculator->calculateBMI();
?>
```

この演習では、`BMI` クラスのコンストラクタと `calculateBMI` メソッドを完成させ、身長と体重からBMIを計算して返すようにしてください。

以上で、PHPのクラスとオブジェクトについての解説を終わります。次回もお楽しみに。さよなら。