1

これらの2つのキーワードと、PHP5での使用方法について混乱しています。「this」はインスタンス化されたオブジェクト(静的ではない)に使用され、「self」はオブジェクトのインスタンスではなくオブジェクト自体を参照しているため、静的オブジェクト内で使用されていると思います。右?

ここで、クラスの静的メソッド内で別の静的変数/メソッドを呼び出すための正しい使用法は次のとおりです。

self::doSomething();
self::$testVar;

それは本当だ?

ただし、次のことも可能であるようです。

$self->testVar;

それでも、$testVarは静的です。何故ですか?

また、なぜ$が自己の前で使用されることもあれば、使用されないこともあり、「this」キーワードについても同じ質問がありますか?

4

2 に答える 2

5

そうです、selfは静的な自己参照用であり、$thisはインスタンス化されたもの用です。selfと$thisはどこでも機能するように見えるかもしれませんが、これを考慮してください。

class A
{
  public static function foo()
  {
    $this->bar();
  }

  public static function bar()
  {
    echo 'foobar!';
  }
}

A::foo(); // Fatal error: Using $this when not in object context

foo()が静的に呼び出されたため、これにより致命的なエラーが発生します。常にどちらか一方を使用するのではなく、時間をかけて適切に使用することをお勧めします。

于 2009-11-09T13:26:41.083 に答える
3

あなたはこれを正しく理解しているようです。self:: は、利用可能なオブジェクトのインスタンスがない場合に静的メンバーと関数に使用されますが、利用可能な場合は $this-> 構文が使用されます。

したがって、静的メソッドでは、 self:: b/c を使用する必要があります。静的メソッドはまさにそれです...静的であり、オブジェクトのインスタンスを作成せずに呼び出すことができます。(つまり、YourClass::staticFunction()) ただし、インスタンス化されたオブジェクトを介して関数が呼び出されるため、非静的メソッドで $this->memberVar を使用することは完全に論理的です。($yourClass->nonStaticFunction()) したがって、$this は実際には関数のコンテキスト内に存在します。

于 2009-11-09T13:28:05.620 に答える