オブジェクトとは?

PHP

オブジェクトとは、オブジェクト指向の処理を行う際の手法です。

クラスと呼ばれるオブジェクトの設計図を定義することで、
作成可能です。

今回はオブジェクトについて詳しくまとめてみました。

1.関数と変数をまとめたもの

オブジェクト内には
変数メソットがセットでまとめられています。

ですので、どの変数がどのメソットに使われているか
わかりやすくなっています。

2.クラス(設計図)から作られる

クラス(設計図)を元に、オブジェクト(インスタンス)を生成する
これをインスタンス化と言います。

生成するオブジェクトは
それぞれ違う名前で定義することができます。

名前は違っても、同じクラス(設計図)から作ったオブジェクト
共通のメソッドを呼び出すことが出来
ます。

3.クラスを引き継いで新しいクラスを定義する

3 – 1 継承

元となるクラスから特性を引き継ぎ新しいクラスを作成し
より特殊なクラスを定義することを継承といいます。

継承元となるクラスを、親クラス/スーパークラス
継承したクラスを、子クラス/サブクラス
と呼びます。

下記のコードでは、

パンがのっているお皿のPlateクラス(親クラス)
を、
パンが沢山のっている大きいお皿のBigplateクラス(子クラス)
継承しています。

<?php

// クラスを継承する

//パンがのっているお皿クラス。(親クラス)
class Plate {
    public $myFood;
    /*constructで$this->myFoodに
    お皿の上に乗る食べ物をセットしてます。*/
    public function __construct() {
        $this->myFood = "パン";
    }
    //discoverでお皿の上のパンを見つけます。
    public function discover() {
        echo "たべかけの".$this->myFood."を発見しました。\n";
    }
}

//クラスを継承するにはextends 親クラスを指定する。
//パンが沢山のっている大きいお皿(子クラス)
class Bigplate extends Plate {
    public function look() {
        echo "大きなお皿にパンが沢山のっている。その中に、\n";
    }
}

$plate = new Plate();
$plate->discover();

echo "\n";

//$bigplateオブジェクトを作っています。
$bigplate = new Bigplate();
$bigplate->look();
//クラスを継承しているので、親クラスのメソットを呼び出している。
$bigplate->discover();

?>

<出力結果>

//親クラス
たべかけのパンを発見しました。(親メソッド)

//子クラス
大きなお皿にパンが沢山のっている。その中に、(子メソッド)
たべかけのパンを発見しました。(親メソッド)

ポイント

またPHPでは、クラスを継承すると
親クラスのconstructも自動で継承するので、
子クラスでは記述を省略することができます。

3 – 2 メソッドのオーバーライド

親クラスのメソッドを子クラスで再定義することをオーバーライドという。

つまり、
親クラスのメソットを、そのまま子クラスで記述すると
内容を書き換えて出力できるという事です。

下記のコードでは、

パンがのっているお皿のPlateクラス(親クラス)
を、
パンが沢山のっている大きいお皿のBigplateクラス(子クラス)
継承しています。

更に、親クラスのdiscoverメソッドをオーバーライドしています。

<?php
// メソッドのオーバーライド
class Plate {
    public $myFood;

    public function __construct($food) {
        $this->myFood = $food;
    }

    public function discover() {
        echo "たべかけの".$this->myFood."を発見しました。\n";
    }
}
class Bigplate extends Plate {
    public function look() {
        echo "大きなお皿にパンが沢山のっている、その中に\n";
    }
    public function discover() {
        echo "たべかけの".$this->myFood."も混ざっていた。\n";
    }
}
$plate = new Plate("パン");
$plate->discover();

$bigplate = new Bigplate("みかん");
$bigplate->look();
$bigplate->discover();
?>

<出力結果>

たべかけのパンを発見しました。(親メソッド)

大きなお皿にパンが沢山のっている、その中に(子メソッド)
たべかけのみかんも混ざっていた。(親メソッドのオーバーライド)

コメント

タイトルとURLをコピーしました