PHP 延遲靜態繫結 功能

2021-10-10 10:57:41 字數 1079 閱讀 4554

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

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

看一下這個例子:

class a

static function fun()

}class b extends a

}$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 extends a

}$obj = new b();

$obj->printname();

// 輸出結果

// join

// b class

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

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

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

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

我理解的是在父類中通過self呼叫自身,如果想呼叫子類中的方法屬性可通過static實現

PHP 延遲靜態繫結 功能,static

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

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 ...