PHP中的$this和self
在PHP編程中經(jīng)常會(huì)用到$this和self,它們都是關(guān)鍵字,但其作用卻不同。簡(jiǎn)單來(lái)說(shuō),$this代表類(lèi)中的當(dāng)前實(shí)例,self代表類(lèi)本身。下文將重點(diǎn)講述這兩個(gè)關(guān)鍵字。
$this的使用
$this是代表類(lèi)中的當(dāng)前實(shí)例,類(lèi)的成員方法中都可以使用該關(guān)鍵字。例如,假設(shè)我們定義了一個(gè)類(lèi)Person,它有兩個(gè)私有屬性和一個(gè)公共方法:
class Person { private $name; private $age; public function introduce() { return "My name is " . $this->name . ", and I am " . $this->age . " years old."; } }在該段代碼中,$this->name和$this->age是類(lèi)內(nèi)部調(diào)用私有屬性的方式。我們可以通過(guò)實(shí)例化Person并調(diào)用introduce方法來(lái)驗(yàn)證代碼的正確性:
$person = new Person(); $person->name = "Tom"; $person->age = "23"; echo $person->introduce(); // 輸出 "My name is Tom, and I am 23 years old."上述例子演示了我們?nèi)绾卧陬?lèi)內(nèi)部訪問(wèn)私有屬性,而$this作為一個(gè)調(diào)用實(shí)例的關(guān)鍵字,可以輕松實(shí)現(xiàn)這一行為。 self的使用 self作用于類(lèi)本身,也是通過(guò)訪問(wèn)常量和靜態(tài)屬性來(lái)使用的,此處以訪問(wèn)常量為例。假設(shè)我們要訪問(wèn)一個(gè)名為MYCONST的常量并輸出它的值:
class MyClass { const MYCONST = 1; public static function doSomething() { echo self::MYCONST; } } MyClass::doSomething(); // 輸出 "1"這里我們通過(guò)self關(guān)鍵字來(lái)訪問(wèn)類(lèi)中的常量。需要注意的是,self常和static一起使用,具體見(jiàn)下文。 $this和self的區(qū)別 $this和self的區(qū)別非常明顯,$this代表當(dāng)前實(shí)例,而self代表類(lèi)本身。簡(jiǎn)單的說(shuō),$this是實(shí)例化對(duì)象后訪問(wèn)該對(duì)象的屬性或方法,而self是在類(lèi)中訪問(wèn)其中的各種變量或方法。 需要注意的是,$this和self不能混用。例如,在類(lèi)方法中不能將$this用于靜態(tài)屬性的訪問(wèn),否則會(huì)造成Fatal Error。
class MyClass { private static $count = 0; public function __construct() { $this->count++; // 錯(cuò)誤的使用方式 } public static function getCount() { return self::$count; } } MyClass::getCount(); // 輸出 "Fatal error: Uncaught Error: Using $this when not in object context"在上述例子中,構(gòu)造函數(shù)中調(diào)用$this->count++,實(shí)際上是為創(chuàng)建的對(duì)象實(shí)體增加屬性值,卻被當(dāng)做靜態(tài)屬性來(lái)賦值,最終會(huì)導(dǎo)致Fatal Error。而正確的做法應(yīng)該是直接調(diào)用靜態(tài)屬性self::$count實(shí)現(xiàn)統(tǒng)計(jì)創(chuàng)建對(duì)象的數(shù)量。 總結(jié) $this代表當(dāng)前實(shí)例,self代表類(lèi)本身。$this常用于訪問(wèn)實(shí)例變量和方法,而self常用于訪問(wèn)靜態(tài)變量和方法。使用時(shí)需要注意區(qū)分它們的不同,避免發(fā)生語(yǔ)法錯(cuò)誤。
上一篇css3d折紙
下一篇php textarea