2009-11-09 98 views
1

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

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

self::doSomething(); 
self::$testVar; 

这是真的吗?

然而,下面也似乎是可能的:

$self->testVar; 

然而,$的testvar是静态的。这是为什么?

另外,为什么$有时使用自我的前面,有时不使用,以及“this”关键字的相同问题?

回答

5

你说得对,自我是静态自引用,而$这是实例化的。自我和$这可能看起来像在工作,但考虑这一点:

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 

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

+0

希望我能接受这两个答案,害怕RC稍早。感谢代码细化! – Tom 2009-11-09 13:49:20

+0

很高兴我可以帮忙,我希望它能够清理一些东西。我对自己的差异有所理解,因为PHP对这些事情是如此的宽容。哦,还有关于钢筋混凝土早些时候我的:13:26:41和RC:13:28:05:p – 2009-11-09 14:00:12

+0

哦,对不起,我一定误会了。 – Tom 2009-11-09 18:33:27

3

您似乎正确理解这一点。当你没有可用对象的实例时,self ::用于静态成员和函数,而当你这样做时使用$ this->语法。

因此,在一个静态方法中,你将不得不使用self :: b/c静态方法就是...静态的,可以在没有正在创建的对象实例的情况下被调用。 (即YourClass :: staticFunction())尽管在非静态方法中使用$ this-> memberVar是完全合乎逻辑的,因为函数是通过实例化对象调用的。 ($ yourClass-> nonStaticFunction())因此$这实际上存在于函数的上下文中。

相关问题