[PHP] self、parent、staticの違いについてわかりやすくまとめてみた

PHPではよく「self::」や「static::」、「parent::」キーワードを利用することが多いかと思います。

今回は、このselfやstatic、parent期ワードについてサンプルコードを記載しながら簡単にまとめておきたいと思います。

  • selfキーワード
    • 現在のクラスを指し示し、同じクラス内の静的な変数やメソッドを参照することができます。
  • staticキーワード
    • 静的なプロパティやメソッドを参照する場合に使用され、継承された場合でも、元のクラスで定義されたプロパティやメソッドを参照することができます。
  • parentキーワード
    • 継承関係にあるクラスの親クラスを指し示し、親クラスで定義されたメソッドやプロパティを参照することができます。

\自身のスキルを向上するには技術書で!!/

月額¥980で技術書が読み放題!!

  • ビジネススキルとマインド向上したい!!
  • 決断や行動を先送りにしてしまう方!!

Kindle Unlimitedでは30日間無料体験実施中!登録はこちら!

selfキーワード

現在のクラスを指し示し、同じクラス内の静的な変数やメソッドを参照するために使用されます。

self::$myVarのように、selfキーワードを使用して、同じクラス内で定義された静的な変数を参照することができます。また、selfキーワードを使用することで、同じクラス内で定義された静的なメソッドを呼び出すこともできます。

class MyClass {
  public static $myVar = 'Hello';

  public static function myMethod() {
    return self::$myVar;
  }
}

echo MyClass::myMethod(); // Hello

上記例では、selfキーワードを使用して、同じクラス内の静的な変数を参照しています。MyClassクラス内で定義された静的な変数$myVarを、myMethod()メソッド内でself::$myVarとして参照しています。

staticキーワード

staticキーワードは、静的なプロパティやメソッドを参照する場合に使用され、継承された場合でも、元のクラスで定義されたプロパティやメソッドを参照することができます。

親クラスで定義された静的なプロパティやメソッドを、子クラスから参照する場合にも使用されます。

例えば、ParentClassという親クラスとChildClassという子クラスがあり、両方のクラスに$myVarという静的な変数が定義されている場合、ChildClass内でstatic::$myVarを使用することで、親クラスの$myVar変数ではなく、ChildClassで定義された$myVar変数を参照することができます。

class ParentClass {
  public static $parentVar = 'Parent';
  
  public static function parentMethod() {
    return static::$parentVar;
  }
}

class ChildClass extends ParentClass {
  public static $childVar = 'Child';
  
  public static function childMethod() {
    return static::$childVar;
  }
}

echo ChildClass::parentMethod(); // Parent
echo ChildClass::childMethod(); // Child

上記の例では、staticキーワードを使用して、親クラスと子クラスの静的なプロパティを参照しています。

親クラスで定義された$parentVar変数を、ParentClass内のparentMethod()メソッドでstatic::$parentVarとして参照しています。

子クラスで定義された$childVar変数を、ChildClass内のchildMethod()メソッドでstatic::$childVarとして参照しています。

継承された場合でも、staticキーワードを使用することで、元のクラスで定義されたプロパティやメソッドを参照することができます。

parentキーワード

parentキーワードは、継承関係にあるクラスの親クラスを指し示し、親クラスで定義されたメソッドやプロパティを参照するために使用されます。

子クラスで親クラスのメソッドやプロパティをオーバーライドした場合、parentキーワードを使用して親クラスのメソッドやプロパティを呼び出すことができます。

parent::myMethod()のように、parentキーワードを使用して、親クラスのmyMethod()メソッドを呼び出すことができます。

class ParentClass {
  public $parentVar = 'Parent';

  public function parentMethod() {
    return $this->parentVar;
  }
}

class ChildClass extends ParentClass {
  public $childVar = 'Child';

  public function childMethod() {
    return parent::parentMethod();
  }
}

$obj = new ChildClass();
echo $obj->childMethod(); // Parent

上記の例では、parentキーワードを使用して、継承関係にある親クラスのプロパティやメソッドを参照しています。

親クラスで定義された$parentVar変数を、ParentClass内のparentMethod()メソッドで$this->parentVarとして参照しています。

子クラスのchildMethod()メソッドでは、parentキーワードを使用して親クラスのparentMethod()メソッドを呼び出しています。これにより、子クラスから親クラスのプロパティやメソッドにアクセスすることができます。

最後に

今回はよく利用するself、static、parentについてまとめてみました。

使い方を理解して、今後も開発を進めていければと思います。

\自身のスキルを向上するには技術書で!!/

月額¥980で技術書が読み放題!!

  • ビジネススキルとマインド向上したい!!
  • 決断や行動を先送りにしてしまう方!!

Kindle Unlimitedでは30日間無料体験実施中!登録はこちら!

タイトルとURLをコピーしました