PHP中的$ this和self有什么不同?
当我在static keyword上阅读php.net时,我对下面的句子感到困惑。
$在声明为static的方法中不可用。
为什么$这样做时不可用?
任何帮助都将不胜感激!
谢谢!
答案 0 :(得分:2)
答案 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
可能意味着两个完全不同的东西。
如果继承和静态属性/方法正在发挥作用,重要的是要知道差异,根据我的经验,在这些情况下,自我几乎总是错误的,并且它可能导致一些有趣的错误,只有当多于一个成员时才会出现类层次结构在给定时间播放。