オブジェクト指向をさらに詳しく Progate:PHP講座3を終えて


未来電子テクノロジーでインターンをしているtakaminです。
Progateを使って勉強中で、PHPのオブジェクト指向をまとめます。

クラスプロパティ

何かクラス全体で処理する必要があるもの(exインスタンスの数など)のために、
インスタンスではなくクラスそのものにプロパティを付ける。
staticを付けるとクラスプロパティ

// ex)インスタンスが何個あるか。
class University{

  private static $count = 0;   // =0は初期値
  public function__construct(){
    self::$count++;     //インスタンスが作られるたびにクラス自身のプロパティ$countを+1
  }                   //インスタンスの数と$countが一致する。
  public static function getCount(){
    return self::$count ;    //ゲッター
  }
}
$TokyoUniv = new University('東京大学');
$OsakaUniv = new university('大阪大学');

継承

プロパティ、メソッドを他のクラスに引き継ぐ。
ex)
全国の大学

西日本、東日本。
で分けようと思うが、正直「全国の大学」に共通なプロパティとメソッドをもとに「地域」追加すればいいから継承しよう。


class EastUniversity extends University     //書き方。
  private $area;  //子クラスには独自プロパティを追加できる。
  public function getType(){
    return $this->area;
  }
  public function setType($type){
    $this->type = $type;
  }
}


オーバーライド
//親クラスと同じ名前のメソッドを小クラスで使うと、上書きされる。
//親クラスと同じ名前のメソッドを使いたいとき時(__constructなど)は、
parent::__construct(){
}
parent::を使う


子クラスが親クラスのプロパティを操作したいとき


private      クラスの中
protected    クラスの中/子クラスの中                           で操作可能範囲
public       クラスの中/子クラスの中/外部からも

クラス条件

「インスタンスが○○のクラスであるとき」は

if($TokyoUniv instanceof EastUniv){        //EastUnivクラスにいるならば(true or false)
  echo $TokyoUniv.'は西日本の大学です。';    //今回はfalseなので何も起こらない。