從這個名字的定義提取出兩個關鍵點,第一點靜態,也就是說這個功能只適用於靜態屬性或靜態方法。
第二點延遲繫結,這個根據下面**就可以很好的理解
看一下這個例子:
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 ...