PHP類中self和$this的區別


1.self代表類,$this代表對象
2.能用$this的地方一定使用self,能用self的地方不一定能用$this
靜態的方法中不能使用$this,靜態方法給類訪問的。

今天在使用靜態方法的時候,使用了$this去調用對象的屬性,導致曝出錯誤信息,在網上查詢了手冊和百度,

發現大部分回答只是說明了在靜態方法中不允許使用$this,只能使用self,較為靠譜的回答說明是$this是實例化對象的指針,self是對象的指針。

針對以上信息,綜合自己的學習知識和網上搜索結果作下圖:

其中,我們可以明顯看到,self調用的類的指針,而非實例化后的對象指針,靜態變量和靜態方法始終屬於類,而非屬於實例化后的對象,因此在靜態方法中無法使用$this,因為此時所處的位置是類所在的指針,只能使用self調用靜態方法或者靜態變量。

如果要在靜態方法中,強制使用函數的其他方法,則只能先實例化一個新的對象,然后再使用該對象的方法。

綜上所述,self調用的是類,而$this調用的則是實例化的對象。下面是代碼。

<?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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM