LoginSignup
3
4

More than 1 year has passed since last update.

静的(スタティック)メソッドと動的(インスタンス)メソッド

Last updated at Posted at 2022-03-30

静的(スタティック)メソッドと動的(インスタンス)メソッドの違いとは?

静的(スタティック)メソッドとは何か?

クラスの中で「static」を記述して作成した関数の中のメソッドのこと。呼び出しはクラスに対して行い、どこで呼び出しても同じ処理を行う。クラスメソッド」という名称もよく使う。

  • 定義例
//クラスの中で定義
[アクセス権限] static function メソッド名(){
  //処理
};

動的(インスタンス)メソッドとは何か?

インスタンスに対して呼び出し、インスタンス毎に固有の結果を返す。関数を定義する時は「static」を付けない。

*インスタンスとは、クラスで定義したプロパティを受け継いでいるものを指します。
詳しくはhttps://qiita.com/non0311/items/26f18af83d84ae95bc91

  • 定義例
//クラスの中で定義
[アクセス権限] function メソッド名(){
  //処理
};

静的(スタティック)メソッドと動的(インスタンス)メソッドの違い

(1) 定義方法の違い
(2) メソッドの呼び出し方の違い
(3) アクセスできるプロパティの違い

(1) 定義方法の違い

定義する時の違いは「static」をつけるか付けないか、と「アクセス権限」の必要性。

メソッド static アクセス権限
静的(スタティック) 必須 必須
動的(インスタンス) 不要 なくてもいい(ない場合はpublic扱い)

アクセス権限について
private > protected > public (=記載なし)の順

  • private : 定義したクラス内のみ
  • protected : 継承クラス(子クラス)からもアクセス可能
  • public : クラスの外からアクセス可能
  • 記載なし(function) : publicと同じ

(2) メソッドの呼び出し方の違い

メソッド 対象 呼び出し方法
静的(スタティック) クラス クラス::メソッド名
動的(インスタンス) インスタンス インスタンス->メソッド名()

静的(スタティック)メソッドは、「->」でも呼び出せる

  • 使用例
class TestClass{

  public static function testStatic(){
    echo "静的(スタティック)メソッド";
  }
  
  
  public function testInstance(){
    echo "動的(インスタンス)メソッド";
  }
}


//「クラス::」での呼び出し
TestClass::testStatic(); //出力結果: 静的(スタティック)メソッド:
TestClass::testInstance(); //出力結果: エラー:

//「オブジェクト->」での呼び出し
$obj = new TestClass;

$obj->testInstance(); //出力結果: 動的(インスタンス)メソッド:
$obj->testStatic(); //出力結果: 静的(スタティック)メソッド:

$obj::testStatic(); //出力結果: 静的(スタティック)メソッド:
$obj::testInstance(); //出力結果: エラー:

(3) アクセスできるプロパティの違い

プロパティ 対象 呼び出し方法 クラス内での呼び出し
静的(スタティック) クラス クラス::プロパティ名 self::$プロパティ名
動的(インスタンス) インスタンス インスタンス->プロパティ名 $this->プロパティ名

「self::」は自分自身のクラスを指し、「$this」は自分自身のクラスをインスタンス化したオブジェクトを指す。
静的(スタティック)メソッドの中では「$this」が使えない、つまり、インスタンスプロパティにアクセスできない

参考文献

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4