簡單易懂 —— this、self、static 的區別

FreeMason發表於2019-12-20

簡介

如果是剛入門不久或較少比較久未使用者,往往比較容易搞混這三者之間的關係,網上的文章五花八門,不夠簡潔

在接下來的文章裡,將省去干擾與花裡胡哨的東西

讀這文章需要理解的基本知識:PHP 繼承、封裝、多型

this

英文解釋:這,這個

基本概念

當一個方法在類定義內部被呼叫時,有一個可用的偽變數 $this。$this 是一個到主叫物件的引用(通常是該方法所從屬的物件,但如果是從第二個物件靜態呼叫時也可能是另一個物件)。

this 就是表示當前物件,從當前物件依次往上找,不存在或無許可權則報錯

self

英文解釋:自己

後期靜態繫結與非轉發呼叫

使用 self:: 或者 CLASS 對當前類的靜態引用,取決於定義當前方法所在的類

self::test 使用的『類』依次往上找 test(重寫優先),不存在或無許可權則報錯

在使用 self::test 時就得保證 test 是存在滴

static

英文解釋:靜態

後期靜態繫結與非轉發呼叫

該功能從語言內部角度考慮被命名為“後期靜態繫結”。“後期繫結”的意思是說,static:: 不再被解析為定義當前方法所在的類,而是在實際執行時計算的。也可以稱之為“靜態繫結”,因為它可以用於(但不限於)靜態方法的呼叫。

執行時,static::test 從最後的子『類』依次往上找 test(子類優先),不存在或無許可權則報錯國

在使用 static::testtest 可以不存在,執行時 test 存在即可

本作品採用《CC 協議》,轉載必須註明作者和本文連結
光年之外

相關文章