PHP靜態延遲繫結

2022-09-07 00:27:18 字數 1017 閱讀 9208

php版本5.3起增加了靜態延遲繫結,也稱遲繫結,主要用於在繼承範圍內引用靜態呼叫的類。簡單地來說:static::不再被解析為當前方法所定義的類,而是在實際執行時計算的。

// 意外的繼承

class person

}class man extends person

echo man::say(); // person

在這個例子中,say()方法使用了 self 關鍵字,指的是 person 類而不是 man 類,所以 person::say() 方法中無法訪問靜態變數最終值,但是有了靜態延遲繫結,這個問題就可以得到解決了。

class person2 

}class man2 extends person2

echo man2::say(); // man

新增了靜態延遲繫結後,當 man2 呼叫靜態方法 say() 時,static:: 會被解析為 man2,而不是 say() 方法的定義類 person。

如果靜態方法呼叫 parent:: 或者 self::,將**呼叫資訊。

// 官網示例:

class a

public static function who()

}class b extends a

public static function who()

}class c extends b

}c::test(); // a c c

當呼叫 a::foo()時,static::解析到的是 a,

當呼叫 parent:: 和 self:: 時,因為**機制,static::被解析為當前實際呼叫類,也就是 c ,所以 parent::foo() = 『c』,self::foo() = 『c』

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

php的延遲靜態繫結

先說下定義 就是把本類在定義階段固定下來的表示式或者變數,改在執行階段才決定。這個是為了解決下面 的問題才引入的 class parents class child extends parents echo child render parents可以看到我們使用self關鍵字只能夠訪問到該類中的靜...