PHP類中self和$this的區別

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();
相關文章
相關標籤/搜索