2011-01-21 41 views
6

這裏是一個例子:

class Test { 

    public function TestMethod() { 

     print_r($this); // Gives me "Test1 Object ()" 

    } 
} 

class Test1 { 

    public function Test1Method() { 

     Test::TestMethod(); 

    } 
} 

$test1 = new Test1; 
$test1->Test1Method(); 

我覺得這很奇怪。任何人都可以向我解釋爲什麼會發生?

+2

我問了一個非常相似的問題(不是一個愚蠢的問題)。答案是非常有用的http://stackoverflow.com/questions/516355/calling-static-method-from-class-bwhich-extends-class-a-of-class-a – 2011-01-21 15:16:00

回答

7

http://www.php.net/manual/en/language.oop5.basic.php

僞變量$this可用 當的方法是從 對象上下文中調用。 $this是對調用對象(通常是該方法所屬的對象 , ,但如果從輔助對象的 上下文中靜態調用 方法,可能還有另一個對象)的引用 。

這並不一定使有很大的意義,不過,如果啓用了E_STRICT將調用警告。

+0

這是有道理的,如果`Test1`是Test的一個子類;也許這只是一種便宜的方式來重新創建從一開始就爲OOP設計的語言中發現的「this」行爲。 – tdammers 2011-01-21 15:25:14

4

簡短回答:您正在使用靜態函數調用調用「非靜態」方法,然後php嘗試查找「$ this」,最後一個真正的「$ this」是Test1中的一個。

如果你打開E_STRICT錯誤報告,它會抱怨。

相關問題