オブジェクトとは、オブジェクト指向の処理を行う際の手法です。
クラスと呼ばれるオブジェクトの設計図を定義することで、
作成可能です。
今回はオブジェクトについて詳しくまとめてみました。
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();
?>
<出力結果>
//親クラス
たべかけのパンを発見しました。(親メソッド)
//子クラス
大きなお皿にパンが沢山のっている。その中に、(子メソッド)
たべかけのパンを発見しました。(親メソッド)
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();
?>
<出力結果>
たべかけのパンを発見しました。(親メソッド)
大きなお皿にパンが沢山のっている、その中に(子メソッド)
たべかけのみかんも混ざっていた。(親メソッドのオーバーライド)
コメント