【PHP】PHPとオブジェクト指向(クラスの書き方)について その②
おつです。オブジェクト指向的なところをもっかい押さえる。
最終的な書き方
<?php // 親クラス class Menu { // ①変数宣言 // protectedでのインスタンス変数宣言 protected $name; protected $price; // クラスプロパティ private static $count; // ②クラスプロパティへのアクセス方法 public function __construct($name, $price) { $this->name = $name; $this->price = $price; // クラスプロパティの加算 self::count++; } // クラスメソッド public static function getCount() { return self::$count; } } // 子クラス // ③クラスの継承 class Drink extends Menu { private $type; // ④メソッドオーバーライド public function __construct($name, $price, $type) { parent::__construct($name, $price); $this->type = $type; } public function getType() { return $this->type; } public function setType($type) { $this->type = $type; ?>
基本的なことばの確認
クラスプロパティ ... クラスの、プロパティ。説明しにくいんだが、インスタンスの作成数を取得するようなクラスプロパティの場合、あるインスタンスが作成された時以降の値も取れる。
クラスメソッド ... クラスのメソッド。例えば"aaa"ってnameプロパティをもつインスタンスを取得する、みたいなメソッドを作るとき便利。
継承 ... あるクラスの特性をあるクラスに引き継がせることを継承と呼ぶ。引き継がれる方を親、引き継ぐ方を子クラスという。
オーバーライド ... 親クラスのメソッドを引き継ぎ、一部書き換えること。
①変数宣言
class Menu { // ①変数宣言 // protectedでのインスタンス変数宣言 protected $name; protected $price; // クラスプロパティ private static $count; // クラスメソッド public static function getCount() { return self::$count; }
protectedについて
public, privateに続いて登場するのがprotected。private指定をすると当クラス以外からのアクセスができなくなるが、protected指定をするとその子クラスからならアクセスができるようになる。つまり継承したいときにはprotected。
クラスプロパティ・メソッドの記述方法
staticってつけるだけ。
②クラスプロパティへのアクセス方法
// ②クラスプロパティへのアクセス方法 public function __construct($name, $price) { $this->name = $name; $this->price = $price; // クラスプロパティの加算 self::count++; }
クラスプロパティのアクセス方法
アクセスするときはself::$クラスプロパティ名
とする。これ子クラスからでも同じアクセス方法なのかな???
③クラスの継承
// 子クラス // ③クラスの継承 class Drink extends Menu { private $type;
class 子クラス extend 親クラス
で継承できる。
④メソッドオーバーライド
// ④メソッドオーバーライド public function __construct($name, $price, $type) { parent::__construct($name, $price); $this->type = $type; }
オーバーライドして使うときの宣言文をまず書き、その配下にオーバーライド元のメソッド、元と先の差分と続く。
オーバーライド元のメソッドはparent::メソッド
の形で短縮可能。説明むずいっすね。
以上!!!