初心者が躓くオブジェクト指向の理解方法とその使い方【キーワード】

<h1>キーワードの説明</h1>

インスタンス化・コンストラクタ・継承などオブジェクト指向には聞きなれない単語がたくさん出てきます。
今回はその解説記事です。

<h1>インスタンス化とコンストラクタ</h1>
<h3>インスタンス化</h3>
<p>インスタンス化とは...</p>
・クラスのコピー（オブジェクト）を生成することを<b>インスタンス化</b>と言う。
・オリジナルとコピーの特徴をすべて別データに置き換えることもできる。
・PHPでは、new演算子を使う。
<h5>例</h5>
※前回に引き続きチョコボを使います。[初心者が躓くオブジェクト指向の理解方法とその使い方 【基礎】](https://qiita.com/Tashitasystems/items/019f795e4bd2b196b9f9)
気になる方は見ていってね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1078759/0a769041-5714-8dfb-90d2-355b718b719a.png)

####コード####
```PHP:instance
//オリジナルのクラスはCharacterで作成
Class Character {
    //プロパティ
    public $name;
    public $color;
    public $length;
    public $weight;

    //メソッド
    //紹介
    public function introduce(){
        echo "名前：" .$this->name;
        echo "色：" .$this->color;
        echo "体長" .$this->length ."cm";
        echo "体重" .$this->weight ."kg";
}
//インスタンス化させたいときは下の書き方
    $red = new Character();
    $red->name = "赤チョコボ";
    $red->color = "赤";
    $red->length = 75;
    $red->weight = 15;
```
これで赤チョコボが生成されました。
変数を設定してname,color,length,weightの値を変えるだけで、別のキャラクターも生成できます。

***
<h3>コンストラクタ</h3>
<p>コンストラクタとは...</p>
クラスから、オブジェクトがnewによって生成されるときに（コンストラクタを設定していれば）自動的に呼び出されるメソッド。
####まずはコンストラクタを設定する####

```PHP:function
class クラス名{
     function __construct(){
       //コンストラクタ内で行いたい処理
       }
}
```
```PHP:construct
class character {
    //プロパティ
    public $name;
    public $color;
    public $length;
    public $weight;
    
    //コンストラクタ
    function __construct($name, $color, $length, $weight){
    // メンバ変数を初期化...メンバ変数とはプロパティのこと。
    $this->name = $name;
    $this->color = $color;
    $this->length = $length;
    $this->weight = $weight;
    }
}
    //赤チョコボの生成
    $red = new Character("赤チョコボ","赤",75,15);
    echo $red->name;
    echo $red->color."色";
    echo $red->length ."cm";
    echo $red->weight ."kg";
/*
結果：
赤チョコボ
赤色
75cm
15kg
となる
改行コードを入れてもよい。*/
```
コンストラクタを使う場面はデータを保存をしたいときなどに応用されます。
データをセーブするメソッドと組み合わせればデータベースに保存もできるので、よかったら応用して使ってみてください。

<h1>継承</h1>
<p>継承とは...</p>
すでに作られたクラスを元に、新しく充実したクラスを作る仕組みのこと。
継承元のクラスをもとに様々な見た目や特徴（プロパティ）やアクション（メソッド）をもった新しいクラスを作ることができる。
・継承元のクラスを「親クラス」と呼ぶ。
・継承してできる新しいクラスを「子クラス」と呼ぶ。
***

#####継承を使う場面（RPGゲームを例にします）#####
100人のキャラクターがいるとします。
その100人にはすべて同じアクション（「私はOOです。」という紹介(introduce)アクション）を実装したい。
100人中20人は攻撃(attackアクション)のできるキャラクターや100人中15人は回復のできるキャラクターを作りたい！
100人すべてのキャラクターを1人1人変更していたら一日では終わらない！！:frowning2:
効率が悪い...どうしよう:frowning2:そうだ継承を使おう！:grinning:
そうすると画像のように数分で簡単に作ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1078759/298fc5a1-f085-6f44-f345-76411af30408.png)
***
####文法的な書き方####
```PHP:extends
class (新しく作りたいクラス名) extends (親クラス名)
{
//この中に新しく実装したい内容を記述する。なくてもOK。
}
```
***
####具体的な例を出した書き方####

#####まずは、親クラスを設定#####
```PHP:chocobo.extends
class Character{
    //まずはプロパティ
    public $name;
    public $color;
    //次にメソッド
    public function introduction(){
        echo "名前:" .$this->name;
        echo "色:" .$this->color;
    }
}
```
#####次に継承#####
```PHP:chocobo.subclass
//継承したい子クラスの設定
class Chocobo extends Character{

    //新しく実装したい内容を記述
    public function attack(){
        echo $this->name."の攻撃！";
    }
}
```
これでChocoboクラスが新しくできました。
継承によって<b>attackメソッド</b>を引き継いだ攻撃的なチョコボの完成です。

<h1>終わりに</h1>
今回は、初心者が躓くオブジェクト指向のキーワードについて記述しました。
オブジェクト指向の基礎が知りたいかたは基礎編もありますので、気になる方はみていってね。
[初心者が躓くオブジェクト指向の理解方法とその使い方 【基礎】](https://qiita.com/Tashitasystems/items/019f795e4bd2b196b9f9)

また、作成者本人もPHPを学習中のため、勉強用のメモとして、この記事を活用しております。
もっとわかりやすく教えていただける方いれば、コメント欄にてお待ちしております。

ではでは♪