在php中self關鍵字能夠代表目前類,一般用於呼叫目前類別的靜態方法或靜態屬性。但是static除了能定義靜態此屬性之外,還有與self類似的功能(代表目前類別)。
但是兩者之間還是有一定的區別的,我們透過程式碼驗證:
<?php header("Content-Type:text/html;charset=utf-8"); Class A{ public static $p1=1; public $p2=2; public static function showInfo(){ echo "<br/>".self::$p1; } public static function showInfo2(){ echo "<br/>".static::$p1; } } Class B extends A{ static $p1=10;//此处覆盖继承过来的变量p1. public $p2=20; } A::showInfo(); echo "<br/>"; B::showInfo(); echo "<hr/>"; A::showInfo2(); echo "<br/>"; B::showInfo2();
透過結果我們可以看出:
當呼叫方法showInfo()時輸出物件為self::$p1。此時,儘管B類是繼承於A類,且在B類中呼叫繼承的方法,其顯示的永遠是self關鍵字所在的那一類。因此可以說:self表示的當前類別主要是當前代碼所在的類別。
當呼叫方法showInfo2()時輸出物件為static::$p1。此時,輸出的結果不相同。 A類別中輸出自己呼叫的屬性。 B也輸出的是自己呼叫的屬性(繼承A類別中的方法後呼叫的$p2被覆寫的值)。因此:static代表的是呼叫目前方法所在的類別。
因此,雖然self和static都可以表示當前類,但是其代表的意義有所差別。
相關推薦:
#以上是php中self和static的區別詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!