我对这两个关键字以及在PHP5中使用它们的方式感到困惑。我认为“this”用于实例对象(不是静态的),而“self”是指对象本身,而不是它的实例,因此在静态对象中使用。正确?
现在,我相信在类的静态方法中正确使用它来调用另一个静态变量/方法如下:
self::doSomething();
self::$testVar;
那是真的吗?
然而,以下似乎也是可能的:
$self->testVar;
然而,$ testVar是静态的。那是为什么?
另外,为什么$有时候会在自我面前使用,有时也不会使用“和”这个关键字的问题?
答案 0 :(得分: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
这会导致致命错误,因为静态调用了foo()。最好花一些时间并适当地使用它们,而不是总是使用其中一种。
答案 1 :(得分:3)
您似乎正确地理解了这一点。当您没有可用对象的实例时,self ::用于静态成员和函数,而$ this->当你这样做时会使用语法。
所以在一个静态方法中,你必须使用self :: b / c,静态方法只是... static,可以在没有创建对象实例的情况下调用。 (即YourClass :: staticFunction())尽管在非静态方法中使用$ this-> memberVar是完全合乎逻辑的,因为函数是通过实例化对象调用的。 ($ yourClass-> nonStaticFunction())因此$ this实际上存在于函数的上下文中。