2009-11-09 38 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())因此$這實際上存在於函數的上下文中。

相關問題