PHP 中 this self static 的區別____PHP

來源:互聯網
上載者:User
轉載自:https://blog.csdn.net/mrzhouxiaofei/article/details/78648079 引入

最近在做軟體工程的課程設計,碰到一個問題,去扒 Laravel 源碼,又搜尋一番,發現是對 self static 的理解不深,才出現了問題,所以記錄下來,避免再次犯同樣的錯誤。 本文 this

this 比較好理解,就是指向當前對象,用於訪問當前對象的非靜態變數和非靜態方法,它是和對象相關的;

<?phpclass Person {    public $name;    public function getName() {        echo $this->name;    }}$p = new Person();$p2 = new Person();$p->name = "小紅";$p2->name = "小明";$p->getName();  // 小紅$p2->getName();  // 小明

上例中 new 了兩個對象,並分別設定對象的 name 屬性,getName() 中使用了 this 訪問當前對象的 name 屬性,所以分別輸出了 name 的值。所以說,this 就是指向當前對象,不指向其他對象或類。 self

self 和 this 不同,它指向類本身,不指向任何執行個體化對象,一般用來訪問類中的靜態變數和靜態方法;

<?phpclass Person {    public static $name = "小紅";    public static function getName() {        echo self::$name;    }}$p = new Person();$p2 = new Person();$p::getName();  // 小紅$p2::getName();  // 小紅$p::$name = "小明";$p::getName();  // 小明$p2::getName();  // 小明

上例中 new 了兩個對象,並修改了其中一個對象的 name 屬性,另一個對象的 name 屬性值也改變了,所以說,self 是指向當前類的,和對象無關,所有的對象共用一個值。 static

static 和 self 一樣,都是指向類,一般都用來訪問類中的靜態變數和靜態方法,但是又有一些不一樣,具體來講:self 寫在哪個類裡,實際調用的就是這個類;static 則是寫在父類裡,然後通過子類用到了這個 static,這個 static 指向的是這個子類,官方稱之為 後期靜態繫結 。

<?phpclass A {    public function say() {        echo "Hello";    }    public function saySelf() {        self::say();    }    public function sayStatic() {        static::say();    }}class B extends A {    public function say() {        echo "World";    }}$b = new B();$b->say();  // World$b->saySelf();  // Hello$b->sayStatic();  // World

上例中可以看到,self 寫在 A 類裡,調用時就指向了 A 類,static 同樣寫在 A 類裡,但是用 A 類的子類 B 類的對象去調用時,卻指向了 B 類,在使用時,static 才確定指向哪個類,這就是 後期靜態繫結 。

後期靜態繫結 總結

this 指向當前對象,用來訪問當前對象的非靜態變數和非靜態方法; 
self 指向類,一般用來訪問當前類的靜態變數和靜態方法,運行之前已經確定指向哪個類; 
static 指向類,一般用來訪問當前類的靜態變數和靜態方法,但又 不限於 靜態調用,運行時才確定指向哪個類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.