【PHP日記】

自分の知識不足を悟った末、なるべく1日一回、Webに関する知識を書いていくだけのブログ。

『self::』と『$this』それぞれの違い 【14日目】

PHPを学び始めた素人目線での、大事だったり大事じゃなかったりする雑知識メモ、self::と$thisの違いについてです。


self::と$thisの違い

PHPにおいてself::$thisは、クラス内で使用される2つの異なる参照方法ですが、それぞれ違う用途があります。

結論からいうと、静的プロパティ / メソッドにアクセスする際に使用されるのがself::で、インスタンス化されたオブジェクトを参照する際に使うのが$thisです。


self::

まずself::に関してですが、こちらはクラス自体を表します。インスタンス化されたオブジェクトではないため、クラスレベルに属している静的メソッドおよびプロパティを呼び出す際に使用されます。


静的メソッドとプロパティについて

簡単にいうと、クラスに属していて、特定のインスタンスには属していないものをいいます。

staticキーワードを使用して宣言され、クラスをインスタンス化しなくてもアクセス(参照)できます。

class MyClass {
    public static function Method() {
        // ...
    }
}

MyClass::Method();


$this

$thisは現在のクラスのインスタンス(オブジェクト)を示すため、非静的メソッド(通常のメソッド)やプロパティにアクセスするために使われるキーワードです。


コードの例

以下にそれぞれの簡単なコード例を挙げておきます。

// self::
class MyClass {
  private static $count = 0;    // 静的プロパティ

  public static function countUp() {
    self::$count++;
  }
}
// $this
class MyClass {
  private $name = '';    // プロパティ

  public function __construct($name) {
    $this->name = $name;
  }
}



まとめ

まとめると、静的プロパティ / メソッドにアクセスする際はクラス自体を表す self:: を使い、非静的(通常の)メソッド / プロパティにアクセスする際はインスタンス化されたオブジェクトをを表す $this を使う形になります。



以上です。



参考文献

https://qiita.com/miriwo/items/d33b63029217a675f440

https://www.php.net/manual/ja/language.oop5.static.php