PHP基礎：関数の基礎をマスターしよう

PHPプログラミングで重要な「関数」について、独学エンジニアというサイトで学んだ内容をもとに自分用の備忘録としてまとめました。

https://dokugaku-engineer.com/course/serverside


---

### **概要**

関数を正しく理解し、適切に使えるようになると、以下のメリットがあります：

- **コードの再利用性向上**：何度も同じ処理を書く必要がなくなる。
- **可読性の向上**：処理の意味を明確にし、他の開発者が理解しやすいコードを書くことができる。
- **メンテナンス性の向上**：修正や機能追加が容易になる。

---

### **目次**


1. [関数の基本構文](#関数の基本構文)
2. [引数の種類](#引数の種類)
3. [返り値](#返り値)
4. [可変関数](#可変関数)
5. [まとめ](#まとめ)

---

## **関数の基本構文**

**関数** とは、 **一連の処理をまとめたもの** です。

基本的な構文は以下のようになります。

```php
function sayHello($name) {
    return "Hello, " . $name . "!";
}

echo sayHello("Taro"); // 出力: Hello, Taro!

```

### **関数のポイント**

- `function` キーワードの後に **関数名** を記述。
- **引数** を `()` の中に指定（省略可能）。
- **処理内容** を `{}` の中に記述。
- `return` を使って **値を返す**（省略可能）。

---

## **引数の種類**

関数の **引数の渡し方** にはいくつかの種類があります。

### **(1) 値渡し（デフォルト）**

通常の引数の渡し方で、 **関数の中で変更しても元の変数には影響を与えません**。

```php
function changeValue($num) {
    $num = 100;
}

$original = 50;
changeValue($original);
echo $original; // 出力: 50（変更されない）

```

---

### **(2) 参照渡し（リファレンス渡し）**

`&` を使うことで、 **変数の実体を関数に渡すことができます**。

```php
function changeValue(&$num) {
    $num = 100;
}

$original = 50;
changeValue($original);
echo $original; // 出力: 100（変更される）

```

 **注意点**：

- 参照渡しを使うと **意図せず変数が変更されるリスク** があります。
- **必要な場合以外は使用を避ける** のがベスト。

---

### **(3) デフォルト引数**

**引数にデフォルト値を設定** することで、 **引数が省略された場合の動作を指定できます**。

```php
function greet($name = "Guest") {
    return "Hello, " . $name . "!";
}

echo greet(); // 出力: Hello, Guest!
echo greet("Taro"); // 出力: Hello, Taro!

```

---

### **(4) 可変長引数**

**引数の数を可変にしたい場合** は `...`（スプレッド構文）を使用します。

```php
function sum(...$numbers) {
    return array_sum($numbers);
}

echo sum(1, 2, 3, 4); // 出力: 10

```

 **メリット**：

- **可変の引数を受け取ることができる** ため、柔軟な関数を作れる。

---

### **(5) 名前付き引数**

PHP 8.0 から導入された機能で、 **引数の順番を無視して値を渡せる** ようになります。

```php
function register($name = "Guest", $age = null) {
    return "Name: $name, Age: " . ($age ?? "N/A");
}

echo register(age: 25, name: "Taro");
// 出力: Name: Taro, Age: 25

```

 **メリット**：

- **引数の順番を気にしなくて済む**。
- **一部の引数だけ渡すことが可能**。

---

## **返り値**

関数から **処理結果を返す** には `return` を使います。

```php
function double($num) {
    return $num * 2;
}

echo double(5); // 出力: 10

```

### **返り値がない場合**

`return` を省略すると、 **デフォルトで `NULL` が返ります**。

```php
function noReturn() {
    echo "This function has no return value.";
}

var_dump(noReturn()); // 出力: NULL

```

---

### **複数の値を返したい場合**

PHP は **1つの値しか返せない** ので、 **配列を使って複数の値を返します**。

```php
function getUserData() {
    return ["Taro", 25, "Engineer"];
}

list($name, $age, $job) = getUserData();
echo "$name, $age, $job"; // 出力: Taro, 25, Engineer

```

---

## **可変関数**

**関数名を変数にして動的に呼び出すことができる機能** です。

```php
function add($a, $b) {
    return $a + $b;
}

$operation = "add";
echo $operation(5, 3); // 出力: 8

```

 **活用例**：

- **ユーザーが選択した処理を実行する**。
- **Excelのデータを元に関数を呼び出す** など。

---

## **まとめ**

### **今回学んだこと**

1. **関数とは**
    - 一連の処理をまとめたもの。
2. **引数の種類**
    - **値渡し（デフォルト）**：元の変数には影響なし。
    - **参照渡し（`&`）**：元の変数が変更される。
    - **デフォルト引数**：引数の省略時に値を指定できる。
    - **可変長引数（`...`）**：任意の数の引数を受け取れる。
    - **名前付き引数（PHP 8.0～）**：順番を気にせず引数を渡せる。
3. **返り値**
    - `return` で関数の結果を返す。
    - **複数の値を返すには配列を使う**。
4. **可変関数**
    - 変数を関数名として利用できる。

---

### **次のステップ**

- **関数を使ってコードを書いてみる**。
- **引数の種類や返り値を活用して、より柔軟な関数を設計する**。
- **可変関数を使って動的な処理を試してみる**。

関数をしっかり使いこなせると **コードの品質が向上し、メンテナンスしやすくなります**。

---

今回は独学エンジニアの学習を通じて得た関数の基礎知識をまとめました。
関数はPHPのコーディングで非常に重要な要素なので、学習中の皆さんの役に立てば幸いです。