【初心者向け】オブジェクト指向を動物で学ぶ！PHPで基礎から理解

# はじめに
オブジェクト指向ということをよく耳にしますが、なかなか完全に理解するのが難しいと思います。今回は、オブジェクト指向の基礎についてサクッと説明していきます。

# オブジェクト指向とは
オブジェクト指向とは、**プログラムの要素を「オブジェクト（モノ）」として扱い、現実世界のモデルをプログラムに落とし込む考え方**です。
例えば、「動物」をプログラムで表現する場合、**動物の設計図（クラス）を作り、それをもとに実際の動物（オブジェクト）を作る**ことができます

![段落テキスト (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/1ca61bf4-df10-40e6-af56-f2fac349d7b7.png)

### ▼ステップ1: 動物の設計図（クラス）を作成
→クラスは 「オブジェクトの設計図」 です。動物のクラスを作りましょう。

```php5
// 動物の設計図（クラス）を作成
class Animal{
// ここに動物の情報（名前や鳴き声）を追加していく
}
```

:::note info
**ポイント**
- クラスとは？ → 「設計図」のようなもの
- この時点では、まだ動物は存在しない（テンプレートだけ）
:::

### ▼ステップ2: 設計に必要な情報（プロパティ）を追加
→動物には「名前」や「鳴き声」があります。
このようなデータをクラスの 「プロパティ（属性）」 として追加します。

```php5
// 動物の設計図（クラス）を作成
class Animal {
    public $name;  // 動物の名前（例: 犬、猫）
    public $sound; // 動物の鳴き声（例: ワンワン、ニャーニャー）
}
```
:::note info
**ポイント**
- 「プロパティ」とは？ → オブジェクトが持つデータ（情報）
- 「public」って何？ → 外部からアクセスできる変数のこと
:::


### ▼ステップ2.5: オブジェクトの初期化（コンストラクタ）
クラスを使ってオブジェクトを作るとき、毎回 ``$animal->name = "犬";`` のように プロパティを手動で設定するのは面倒 です。
そこで、「オブジェクトが作られた瞬間に自動で値をセットする」 ために コンストラクタ (__construct) を使います。

```php
// 動物の設計図（クラス）を作成
class Animal {
    public $name;  // 動物の名前（例: 犬、猫）
    public $sound; // 動物の鳴き声（例: ワンワン、ニャーニャー）

    // コンストラクタ（オブジェクトが作られた瞬間に自動実行される）
    public function __construct($name, $sound) {
        $this->name = $name;   // 渡された名前をプロパティにセット
        $this->sound = $sound; // 渡された鳴き声をプロパティにセット
    }
}
```

:::note info
**ポイント**
-  __construct は オブジェクトを作るときに自動で実行される特別なメソッド 
- __construct($name, $sound) のように、引数を受け取ってプロパティにセットする
:::

### ▼ステップ3: 設計に必要な処理（メソッド）を追加
→「メソッド」 とは、オブジェクトが持つ 動作や処理 のことです。
例えば、動物には 「鳴く」 という動作があります。
この「鳴く」動作を メソッド として追加します。
```php
// 動物の設計図（クラス）を作成
class Animal {
    public $name;  // 動物の名前（例: 犬、猫）
    public $sound; // 動物の鳴き声（例: ワンワン、ニャーニャー）

      // コンストラクタ（オブジェクトが作られた瞬間に自動実行される）
    public function __construct($name, $sound) {
        $this->name = $name;   // 渡された名前をプロパティにセット
        $this->sound = $sound; // 渡された鳴き声をプロパティにセット
    }

    //鳴き声を表示するメソッド
    public function makeSound() {
        return "{$this->name} は「{$this->sound}」と鳴きます。";
    }
}
```

:::note info
**ポイント**
- 「$this」とは？　→ 「このオブジェクト自身」を指す特別な変数 
:::

これで簡単な動物の設計図(クラス)の作成が完了しました。今度は、このクラスを実際に使用してみます。


### ▼ステップ4: オブジェクト（実際の動物）を作成
→　作成したクラスを利用するには、「インスタンス化」という作業が必要です。
「インスタンス化」 とは、設計図（クラス）から 実際のオブジェクト を作ることです。インスタンス化すると、クラスの機能を使えるオブジェクトが作成されます。

```php
// 動物の設計図（クラス）を作成
class Animal {
    public $name;  // 動物の名前（例: 犬、猫）
    public $sound; // 動物の鳴き声（例: ワンワン、ニャーニャー）

    //コンストラクタ（オブジェクトが作られた瞬間に自動実行される）
    public function __construct($name, $sound) {
        $this->name = $name;   // 渡された名前をプロパティにセット
        $this->sound = $sound; // 渡された鳴き声をプロパティにセット
    }

    //鳴き声を表示するメソッド
    public function makeSound() {
        return "{$this->name} は「{$this->sound}」と鳴きます。";
    }
}


// ▼ここからインスタンス化（クラスの外でオブジェクトを作る）
$dog = new Animal("犬", "ワンワン");
$cat = new Animal("猫", "ニャーニャー");

echo $dog->makeSound(); // 犬 は「ワンワン」と鳴きます。
echo "<br>";
echo $cat->makeSound(); // 猫 は「ニャーニャー」と鳴きます。
```

:::note info
**ポイント**
- new Animal(...) でオブジェクトを作成
- $dog は Animal クラスのインスタンス（実体）
- **インスタンス化しないとメソッドを呼び出せない！**
:::

# 終わりに
わかったようで完全に理解するのがなかなか難しいのがオブジェクト指向だと思います。
今後も引き続きオブジェクト指向について学んでいきたいと思います。
最後までご覧いただきありがとうございました！