21

PHPクラスまたはPHPメソッドのselfとの違いはどこにありますか?$this->

例:

私は最近このコードを見ました。

public static function getInstance() {

    if (!self::$instance) {
        self::$instance = new PDO("mysql:host='localhost';dbname='animals'", 'username', 'password');;
        self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    return self::$instance;
}

$this->しかし、それはクラスの現在のインスタンス(オブジェクト)を参照していることを覚えています(これも間違っている可能性があります)。しかし、違いは何ですか?

4

7 に答える 7

19

$thisクラスのインスタンスを参照します。これは正しいです。ただし、静的状態と呼ばれるものもあります。これは、そのクラスのすべてのインスタンスで同じです。self::これらの属性と関数のアクセサーです。

また、通常、静的メソッドからインスタンスメンバーにアクセスすることはできません。つまり、あなたはできません

static function something($x) {
  $this->that = $x;
}

staticメソッドは、参照しているインスタンスを認識しないためです。

于 2009-12-22T18:40:11.560 に答える
17

$this現在のオブジェクトをself参照し、現在のクラスを参照します。クラスはオブジェクトの青写真です。したがって、クラスを定義しますが、オブジェクトを作成します。

つまり、静的にはselfを使用し、非静的メンバーまたはメソッドにはthisを使用します。

于 2009-12-22T18:40:01.593 に答える
4

selfクラスレベルのスコープ$thisで使用されますが、インスタンスレベルのスコープで使用されます。

于 2009-12-22T18:39:32.300 に答える
2

self呼び出し元オブジェクトのクラスを参照します。$thisオブジェクト自体を指します。

于 2009-12-22T18:39:55.810 に答える
2

$thisクラスの現在のインスタンスのメソッドとプロパティを参照するために使用されます。

self以前は、クラスのすべてのインスタンスで共有されている(さらにはインスタンスの外部からもアクセスできる)静的メソッドとプロパティを参照していました。


静的キーワード を見ることができます(数行を引用)

クラスのプロパティまたはメソッドを静的として宣言すると、クラスのインスタンス化を必要とせずにそれらにアクセスできるようになります。静的として宣言されたプロパティは、インスタンス化されたクラスオブジェクトではアクセスできません(静的メソッドではアクセスできますが)

..。

静的プロパティには、矢印演算子->を使用してオブジェクトからアクセスすることはできません。


そして、ページのプロパティ (引用)から:

クラスメソッド内では、静的クラスメソッドのコンテキスト内の静的プロパティへのアクセスがない限り、フォーム$this->property propertyプロパティの名前)を使用してプロパティ、定数、およびメソッドにアクセスできます。フォーム self::$property

于 2009-12-22T18:42:08.067 に答える
2

$thisはクラスのインスタンスを呼び出すために使用され、self::は主にクラス内の定数変数を呼び出すために使用されます。

于 2015-06-08T08:55:34.473 に答える