在PHP中混淆$ this和self

时间:2013-05-09 04:10:59

标签: php oop

PHP中的$ this和self有什么不同?

当我在static keyword上阅读php.net时,我对下面的句子感到困惑。

  

$在声明为static的方法中不可用。

为什么$这样做时不可用?

任何帮助都将不胜感激!

谢谢!

3 个答案:

答案 0 :(得分:2)

$this用于调用非静态变量和方法。

self用于调用静态变量和方法。

When to use self over $this?

答案 1 :(得分:0)

$this用于访问类的成员函数和非静态成员属性

,而

self用于访问类的静态成员和静态函数。

使用Static时需要记住的一件事是静态成员只能通过静态方法访问,而不能通过类的其他成员函数(非静态)访问。

答案 2 :(得分:0)

另一个有趣的方面是,还有一个static范围可以用来引用调用类上下文的类而不是定义的类上下文。所以代码:

class A {
    public static function createNew(){
       return new self();
    }
}

class B extends A {
}

$test = B::createNew(); // This will actually yield an instance of A

但如果A类被定义为

class A {
    public static function createNew(){
       return new static();
    }
}    

然后$test = B::createNew();会像你期望的那样产生一个B的实例。

这与静态属性相关,当游戏中存在继承self::$property时,static::$property可能意味着两个完全不同的东西。

如果继承和静态属性/方法正在发挥作用,重要的是要知道差异,根据我的经验,在这些情况下,自我几乎总是错误的,并且它可能导致一些有趣的错误,只有当多于一个成员时才会出现类层次结构在给定时间播放。