PHPでクラス作成

クラス定義の要素

1.メンバ変数(プロパティ)
2.コンストラクタ
3.メンバ関数(メソッド)

コンストラクタとは

引数をメンバ変数に対応させるための、クラス名と同じ名前の関数

クラス定義の例

class Kurasu {
  var $aaa;                     //メンバ変数の設定
  var $bbb;
  var $ccc = "代入もできる";

  function Kurasu($aaaa,$bbb) { //コンストラクタ
    $this->aaa = $aaaa;
    $this->bbb = $bbb;
  }

  function Zeikomi() {          //メンバ関数の定義
    $tax = $this->aaa * 0.05;
    return $this->aaa + $tax;
  }
}

クラス使用

1.クラスをインスタンス化して変数(オブジェクト)に代入
2.オブジェクトからメンバ関数、メンバ変数を呼びだして使用

クラス使用の例

$ob = new Kurasu("1000","あいうえお"); //クラスをインスタンス化して変数に代入

echo $ob->ccc;            //メンバ変数の呼び出し例
$item = $ob->ccc;

echo $ob->Zeikomi();      //メンバ関数の呼び出し例
$kakaku = $ob->Zeikomi();

クラスの継承

class B extends A {



}

※A:スーパークラス(親)、B:サブクラス(子)

アクセス修飾子

class Kurasu {

    public $a;    // どこからでもアクセス可能
    protected $c; // 当クラス、子クラスからアクセス可能
    private $b;   // 当クラスのみからアクセス可能

}

static

プロパティの値は通常、生成された各インスタンスに属している
しかし、staticが付いたプロパティはインスタンスではなくクラスに属すことになる

class StaticTest {

    public static $num = 0;

    public function countPlus(int $plus):void {
        self::$num += $plus;
    }
}

$staticA = new StaticTest();
$staticB = new StaticTest();

$staticA->countPlus(10);
echo $staticA::$num; // 10

$staticB->countPlus(10);
echo $staticB::$num; // 20

echo StaticTest::$num; // 20


ひとつのクラスから複数のインスタンスが作成される場合を想定
staticの「静的」とは、「インスタンスが異なっても固定」のようなニュアンス

ポリモーフィズム

継承先の各クラスでメソッド名は同じでも挙動が異なることをポリモーフィズムと呼ぶ

ポリモーフィズム
・複雑な処理を分かりやすく記述できる
・保守性が高い
・クラスを細分化できる

interface(インターフェース)
・インターフェースから直接インスタンスの作成はできない
・アクセス修飾子はpublicのみ
・抽象メソッドしか定義できない

implements
・interfaceからclassへ実装する動作
・文法は継承と同じ
・継承に似ているが、厳密には継承と異なる。継承ではなく「実装」

インターフェースと抽象クラスの違い
・インターフェースは多重実装できる。抽象クラスは多重継承できない
・インターフェースのアクセス修飾子はpublicのみなので、外部から呼び出されることが前提。抽象クラスのアクセス修飾子はpublicとprotected