PHP – static::とself::

概要

static::self::はクラスのスタティックメソッドを指すときに使えるが、それぞれ以下のような違いがある。

  • staticはそれが実行されるときのクラスを指す
  • selfはそれが定義されたときのクラスを指す

参照:new staticとnew self

準備

以下のようにParentClassとそれを継承したChildClassを準備する。

  • いずれも同じ名前のstaticメソッドstatic_method()を持つ
  • それぞれのクラスはインスタンスメソッドparent_method()child_method()を持つ
    • 何れの内容も同じで、static::static_method()self::static_method()を実行する

クラスからstaticメソッドを呼ぶ

クラスからstaticメソッドを呼ぶと、当然それぞれに対応したstatic_method()が実行される。

親クラスのメソッドから呼ぶ

親クラスのインスタンスを作って、インスタンスメソッドparent_method()内でstaticselfstatic_method()を呼び出す場合。

親クラスのstaticメソッドしか対象がないので、いずれの場合も親クラスのstatic_method()が実行される。

子クラスのメソッドから呼ぶ

子クラスのインスタンスを作って、インスタンスメソッドchild_method()内でstaticselfstatic_method()を呼び出す場合。

staticselfとも子クラスを指し、子クラスのインスタンスメソッドが実行される。

子クラスで親クラスのメソッドから呼ぶ

子クラスのインスタンスを作って、継承元の親クラスのインスタンスメソッドparent_method()からstaticselfstatic_method()を呼び出す場合。

staticは実行時のクラスを指すため、Childクラスのstatic_method()が実行される。

一方selfは定義時のクラスを指すため、parent_method()が定義されたParentClassstatic_method()が実行される。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です