PHP 延遲靜態繫結 功能,static

2021-07-27 22:57:21 字數 1085 閱讀 7081

php "延遲靜態繫結" 功能,static

從這個名字的定義提取出兩個關鍵點,第一點靜態,也就是說這個功能只適用於靜態屬性或靜態方法。

第二點延遲繫結,這個根據下面**就可以很好的理解

看一下這個例子:

class

a

static

function

fun()

}class b extendsa}

$obj = new

b();

$obj->printname();

//輸出結果

// tom

// a class

我在printname函式裡面使用了self關鍵字,self是指向當前類的"指標",

所以很多人會理想的認為輸出結果會是這樣:

//

join

// b class

是這樣的,在定義a類的是時候,在函式printname裡面使用self關鍵字呼叫了靜態方法或屬性,

但是這個函式一旦定義好,a類的靜態方法和屬性就被繫結到函式了,不要去追究為什麼,php就是這麼實現的,

但是我們現在要實現這樣的效果,就是函式定義好後裡面使用到的靜態方法和屬性不要立即繫結死,

而是根據最終繼承的類來確定繫結。

所以php在5.5以後使用了static關鍵字來解決這個問題,解決後的**例子如下:

class

a

static

function

fun()

}class b extendsa}

$obj = new

b();

$obj->printname();

//輸出結果

// join

// b class

大家可以在專案中自行挖掘使用場景,比如乙個會員父類  class vip

下面兩個子類分別是 超級會員 svip 和 年費會員 yvip

可以在兩個子類中分別重寫 static usergroup() 方法 或者其他靜態屬性 ,父類中使用延遲靜態繫結

這樣可以寫出很優雅的**

PHP 延遲靜態繫結 功能

從這個名字的定義提取出兩個關鍵點,第一點靜態,也就是說這個功能只適用於靜態屬性或靜態方法。第二點延遲繫結,這個根據下面 就可以很好的理解 看一下這個例子 class a static function fun class b extends a obj new b obj printname 輸出結...

PHP延遲靜態繫結

1 self用法 self是指向定義它的當前類的指標。當前類 current class class person 獲取年齡 public static function getage 輸出 self name i am person self age 18 2 static用法 static是指向...

PHP延遲靜態繫結

所謂延遲靜態繫結,顧名思義,靜態呼叫時 符號左側的部分的的繫結是延遲,也就是說不再被解析為定義當前方法所在的類,而是在實際執行時計算的。class people public static function eat class fatguy extends people public static ...