PHP中this和self關鍵字的區別:
1、self代表類,$this代表物件
2、能用$this的地方一定使用self,能用self的地方不一定能用$this
3、靜態的方法中不能使用$this,靜態方法給類別存取的。
PHP中this和self關鍵字的用法:
#self是引用靜態類別的類別名,而$this是引用非靜態類別的實例名。
static 的屬性和方法,只能存取static的屬性和方法,不能類別存取非靜態的屬性和方法。
因為靜態屬性和方法被建立時,可能還沒有任何這個類別的實例可以被呼叫。
static的屬性,在記憶體中只有一份,為所有的實例共用。
使用self::
關鍵字存取目前類別的靜態成員。
一個類別的所有實例,共用類別中的靜態屬性。
也就是說,在記憶體中即使有多個實例,靜態的屬性也只有一份。
下面範例中的設定了一個計數器$count屬性,設定private 和 static 修飾。
這樣,外界並不能直接存取$count屬性。而程式運行的結果我們也看到多個實例在使用同一個靜態的$count 屬性。
<?php class user { private static $count = 0 ; //记录所有用户的登录情况. public function __construct() { self::$count = self::$count + 1; } public function getCount() { return self::$count; } public function __destruct() { self::$count = self::$count - 1; } } $user1 = new user(); $user2 = new user(); $user3 = new user(); echo "now here have " . $user1->getCount() . " user"; echo "<br />"; unset($user3); echo "now here have " . $user1->getCount() . " user"; ?>
靜態屬性直接呼叫
靜態屬性不需要實例化就可以直接使用,在類別還沒創建時就可以直接使用。
使用的方式是: 類別名稱::靜態屬性名稱
<?php class Math { public static $pi = 3.14; } // 求一个半径3的园的面积。 $r = 3; echo "半径是 $r 的面积是<br />"; echo Math::$pi * $r * $r; echo "<br /><br />"; //这里我觉得 3.14 不够精确,我把它设置的更精确。 Math::$pi = 3.141592653589793; echo "半径是 $r 的面积是<br />"; echo Math::$pi * $r * $r; ?>
類別沒有創建,靜態屬性就可以直接使用。
靜態方法
靜態方法不需要所在類別被實例化就可以直接使用。
使用的方式是 類別名稱::靜態方法名稱
相了解更多相關內容請造訪PHP中文網:PHP影片教學
#以上是php中self和this的差別與用法詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!