1.self表明類,$this表明對象
2.能用$this的地方必定使用self,能用self的地方不必定能用$this
靜態的方法中不能使用$this,靜態方法給類訪問的。php
今天在使用靜態方法的時候,使用了$this去調用對象的屬性,致使曝出錯誤信息,在網上查詢了手冊和百度,函數
發現大部分回答只是說明了在靜態方法中不容許使用$this,只能使用self,較爲靠譜的回答說明是$this是實例化對象的指針,self是對象的指針。學習
針對以上信息,綜合本身的學習知識和網上搜索結果做下圖:this
其中,咱們能夠明顯看到,self調用的類的指針,而非實例化後的對象指針,靜態變量和靜態方法始終屬於類,而非屬於實例化後的對象,所以在靜態方法中沒法使用$this,由於此時所處的位置是類所在的指針,只能使用self調用靜態方法或者靜態變量。spa
若是要在靜態方法中,強制使用函數的其餘方法,則只能先實例化一個新的對象,而後再使用該對象的方法。指針
綜上所述,self調用的是類,而$this調用的則是實例化的對象。下面是代碼。code
<?php class demo { public $a; public $b; public static $c = 100; public function __construct($a) { $this->a = $a; $this->funct(); } public static function func() { $newObj = new self(20); $newObj->funct(); self::$c += 100; echo self::$c; } private function funct() { $this->b = $this->a * 200; } public function getC() { echo self::$c; } } $demo = new demo(3); $demo::func(); $demo::getC(); $demo2 = new demo(4); $demo2::func(); $demo::getC(); $demo2::getC(); $demo->getC();