1

我对这两个关键字以及在 PHP5 中使用它们的方式感到困惑。我认为“this”用于实例化对象(非静态),而“self”指的是对象本身,而不是它的实例,因此在静态对象中使用。对?

现在,我相信在类的静态方法中调用另一个静态变量/方法的正确用法如下:

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

确实如此?

但是,以下似乎也是可能的:

$self->testVar;

然而, $testVar 是静态的。这是为什么?

另外,为什么有时会在 self 前面使用 $ 有时不使用 $,并且对于“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 回答