【发布时间】:2013-05-03 11:34:24
【问题描述】:
PHP中的$this和self有什么区别?
当我在php.net 上阅读static keyword 时,我对以下句子感到困惑。
$this 在声明为静态的方法中不可用。
为什么这样做时 $this 不可用?
任何帮助将不胜感激!
谢谢!
【问题讨论】:
PHP中的$this和self有什么区别?
当我在php.net 上阅读static keyword 时,我对以下句子感到困惑。
$this 在声明为静态的方法中不可用。
为什么这样做时 $this 不可用?
任何帮助将不胜感激!
谢谢!
【问题讨论】:
【讨论】:
$this 用于访问类的非静态成员函数和成员属性
同时
self 用于访问类的静态成员和静态函数。
在使用静态时需要记住的一点是,静态成员只能由静态方法访问,而不能由类的其他成员函数(非静态)访问。
【讨论】:
另一个有趣的方面是,还有一个可以使用的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 可能意味着两个完全不同的东西。
如果继承和静态属性/方法在起作用,重要的是要知道区别,根据我的经验,self 在这些情况下几乎总是错误的,它可能导致一些有趣的错误,只有当类层次结构在给定时间起作用。
【讨论】: