PHP中的$ this和self有什麼不同?
雖然我讀static keywordphp.net,我對以下句子感到困惑。
$這在聲明爲static的方法內不可用。
爲什麼$這樣做不可用?
任何幫助將不勝感激!
謝謝!
PHP中的$ this和self有什麼不同?
雖然我讀static keywordphp.net,我對以下句子感到困惑。
$這在聲明爲static的方法內不可用。
爲什麼$這樣做不可用?
任何幫助將不勝感激!
謝謝!
感謝您的回答!您提供的鏈接非常棒! – user2364801 2013-05-09 05:21:59
$this
用於訪問類的成員函數和成員屬性它們的非靜態
而
self
用於訪問靜態成員和一類的靜態函數。
使用Static時需要記住的一件事是靜態成員只能由靜態方法訪問,而不能由類的其他成員函數(非靜態)訪問。
這樣做的另一個有趣的方面是,還有一個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::$property
和static::$property
可能意味着兩個完全不同的東西。
如果繼承和靜態屬性/方法在起作用,重要的是要知道差異,以我的經驗來看,在這些情況下,自我幾乎總是錯誤的,它可能導致一些有趣的錯誤,只有當多於一個成員類層次結構在給定的時間內發揮作用。
你也可以檢查[這個答案](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
看看這個鏈接http://php.net/manual/en/language.oop5.basic.php – slackmart 2013-05-09 04:22:01