【PHP】静的な変数やメソッドを定義する「static」について
今回は同じクラスで作成した、共通のオブジェクト間で使用することができる静的な変数やメソッドを定義する「static」について記述します。
静的な変数やメソッドを定義する「static」とは?
「static」とはクラス内で使用できる静的な変数やメソッドを定義する構文です。
クラスはオブジェクトを作成する為の設計図です。オブジェクトを作成していく際、各オブジェクトには別個の値が割り当てられます。
「static」は同じクラス間で使用できる共通の値を定義します。
静的な変数を定義する
今回は消費税計算をするクラスのメソッドを利用して動作を確認してみましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php class Buy { //クラスを宣言 public static $tax = 1.08; //「static」で消費税率1.08を「$tax」に代入する public $a; //商品aの値段 public $b; //商品bの値段 public function __construct($a , $b){ //コンストラクタ(インスタンス化した際の初期値入力設定) $this->a = $a; //商品$aの値段を代入する $this->b = $b; //商品$bの値段を代入する } public function price(){ //「商品a」 + 「商品b」を値段を合計して消費税率をかけるメソッド echo round(($this->a + $this->b) * self::$tax); } } $ab = new Buy(80 , 20); //「商品a = 80円」、「商品b = 20」 $ab->price(); ?> |
実行結果は以下の通りです
例で代入した商品aの80円と商品bの20円で、合計100円の値段に消費税率8%(1.08)をかけます。計算結果は108円で正常に計算できているようですね。消費税率は商品の値段が変わっても一定なので静的な変数として設定しています。「public static $tax = 1.08」と変数の前に「static」と宣言することで静的な変数を定義できます。
そして「static」に設定した変数、「$tax」を呼び出すために「self::$tax」という書き方をしています。「static」の変数を呼び出すためには「self::〇〇(変数、またはメソッド名)」という書き方が必要です。「$this」は「自身のインスタンス」を呼び出すのに対し、「self::」とは「このクラス自身の~」という意味なので覚えておきましょう。
静的なメソッドを定義する
「static」は変数だけではなくメソッドに対しても使用することができます。上記の消費税計算クラスに下記のコードを追加してみます。
|
1 2 3 |
public static function price_static($price_a , $price_b){ //「商品a」 + 「商品b」を値段を合計して消費税率をかけるメソッド echo round(($price_a + $price_b) * self::$tax); } |
「function」の前に「static」を記述することで静的なメソッドに定義することができます。静的なメソッドを定義すれば、オブジェクトを作成せずにメソッドを使用することが可能になります。呼び出し方は以下の通りです。
|
1 |
クラス名::メソッド名(引数); |
「クラス名::メソッド名(引数)」と記述することで、オブジェクトを作成することなく、クライス内のメソッドを使用することができます。
以下サンプルコードと実行結果になります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class Buy { //クラスを宣言 public static $tax = 1.08; //「static」で消費税率1.08を「$tax」に代入する public $a; //商品aの値段 public $b; //商品bの値段 public function __construct($a , $b){ //コンストラクタ(インスタンス化した際の初期値入力設定) $this->a = $a; //商品$aの値段を代入する $this->b = $b; //商品$bの値段を代入する } public function price(){ //「商品a」 + 「商品b」を値段を合計して消費税率をかけるメソッド echo round(($this->a + $this->b) * self::$tax); } public static function price_static($price_a , $price_b){ //「商品a」 + 「商品b」を値段を合計して消費税率をかける静的なメソッド echo round(($price_a + $price_b) * self::$tax); } } Buy::price_static(80 , 20); //商品の合計金額を計算するメソッドを呼び出す ?> |
「Buy::price_static(80 , 20);」と記述することで、オブジェクトを作成することのなくメソッドを呼び出せることが確認出来ました。
まとめ
- 「static」を宣言することで静的な変数やメソッドを定義することができる
- 静的な変数を呼び出すには「self::変数名」で呼び出すことができる
- 静的なメソッドはオブジェクトを作成しなくてもメソッドを呼び出すことができる
- 静的なメソッドを呼び出すには「クラス名::メソッド名(引数)」で呼び出すことができる
