外からアクセスできる静的メソッドと静的プロパティ

次のプログラムを見てみましょう。

<?php
class Item {
  public int $tax = 10; // 消費税

  // 消費税を取得
  public function getTax(): int {
    return $this->tax;
  }
}

$item = new Item();
echo $item->getTax(); // 10が出力される

Itemというクラスには、消費税率が定義されていて、それを取得するメソッドが定義されています。しかし、現状では消費税を知るためだけにわざわざインスタンスを作らなければなりません。

このように、普段からよく利用するメソッドなどはインスタンスにしなくても利用できると便利です。そんな時に使えるのが「静的メソッド」「静的プロパティ」です。

静的メソッドを定義しよう

静的メソッドを定義するには、宣言の中に「static」というキーワードを含めます。次のように変更してみましょう。

$public *static* function getTax(): int {
    *return 10;*
}

なお、静的メソッドからは通常のプロパティは参照できないため、ここでは一旦 10という数字をそのまま返しています。これで、インスタンス化しなくても利用できるようになります。

echo Item::getTax();

自クラス内で利用する場合は「self::」という記述を使います。

public function xxx() {
    $tax = *self::*getTax();
}

静的プロパティを定義しよう

静的メソッドと同様に、外部からアクセスできるプロパティは同じくプロパティの定義に「static」キーワードを含めます。

public *static* int $tax = 10; 消費税

同じく、次のようにアクセスできます。

echo Item::$tax;

また、静的メソッドからでも静的プロパティなら呼び出すことができます。self::を利用しましょう。

$public *static* function getTax(): int {
    return *self::$tax*;
}

完成プログラム

<?php
class Item {
    public static int $tax = 10;

    public static function getTax(): int {
        return self::$tax;
    }
}

echo Item::getTax()

ともすたチャンネルに
チャンネル登録する