親です。

子ども産まれたんで育児とかについて書きます。映画とか心理学とかITとかの趣味についても書きます。

【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::メソッドの形で短縮可能。説明むずいっすね。

以上!!!