为什么self :: function()和$ self-> variable或self :: $ variable即使有$ this-> function()和$ this-> variable(PHP)?

Tom*_*Tom 1 php this self keyword

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

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

self::doSomething();
self::$testVar;
Run Code Online (Sandbox Code Playgroud)

确实如此?

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

$self->testVar;
Run Code Online (Sandbox Code Playgroud)

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

另外,为什么$有时候会在自我面前使用,有时也不会使用"和"这个关键字的问题?

Mik*_*e B 5

你是对的,self是静态自引用,而$是实例化的.self和$这似乎在任何地方都可以工作,但请考虑这个:

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
Run Code Online (Sandbox Code Playgroud)

这会导致致命错误,因为静态调用了foo().最好花一些时间并适当地使用它们,而不是总是使用其中一种.