2013-05-09 84 views
1

PHP中的$ this和self有什麼不同?

雖然我讀static keywordphp.net,我對以下句子感到困惑。

$這在聲明爲static的方法內不可用。

爲什麼$這樣做不可用?

任何幫助將不勝感激!

謝謝!

+0

你也可以檢查[這個答案](http://stackoverflow.com/questions/1948315/wheres-the-difference-between-self-and-this-in-a-php-class-or-php-方法) – MISJHA 2013-05-09 04:14:59

+0

看看這個鏈接http://php.net/manual/en/language.oop5.basic.php – slackmart 2013-05-09 04:22:01

回答

2

$this用於調用非靜態變量和方法。

self用於調用靜態變量和方法。

When to use self over $this?

+1

感謝您的回答!您提供的鏈接非常棒! – user2364801 2013-05-09 05:21:59

0

$this用於訪問類的成員函數和成員屬性它們的非靜態

self用於訪問靜態成員和一類的靜態函數。

使用Static時需要記住的一件事是靜態成員只能由靜態方法訪問,而不能由類的其他成員函數(非靜態)訪問。

0

這樣做的另一個有趣的方面是,還有一個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::$propertystatic::$property可能意味着兩個完全不同的東西。

如果繼承和靜態屬性/方法在起作用,重要的是要知道差異,以我的經驗來看,在這些情況下,自我幾乎總是錯誤的,它可能導致一些有趣的錯誤,只有當多於一個成員類層次結構在給定的時間內發揮作用。