PHP後期靜態繫結理解

2021-09-26 13:58:30 字數 782 閱讀 4150

最近遇到乙個php手冊上的例子,自己掃了一眼,做錯了,mark一下
<?php

class a

public static function who()

}class b extends a

public static function who()

}class c extends b

}c::test();

?>

對**呼叫和非**呼叫不理解的人得出的答案是aac,執行的結果是acc一時不明白其原理。手冊看了一遍又一遍終於有點理解了。

**首先後期靜態繫結的工作原理是儲存了在上乙個非**呼叫的類名。**

當進行靜態方法呼叫的時候,該類名即為明確指定的那個類;當進行非靜態方法呼叫時,即為該物件所屬的類。a::who()是非**呼叫 類名::靜態方法

所謂的"**呼叫"(forwardingcall)指的是通過以下幾種方式進行的靜態呼叫:self::,parent::,static:: 以及 forward_static_call()。可用 get_called_class() 函式來得到被呼叫的方法所在的類名,static:: 則指出了其範圍。**只有static是後期靜態繫結**。static::who()是**呼叫。

在本例中首先是c::test()這是非**呼叫,test()方法已經繫結在c類上了,a::foo()是乙個非**呼叫,foo()方法繫結在a類上,parent:: ,self::都是**呼叫,繫結在c類上。

php後期靜態繫結

後期靜態繫結 static 不再被解析為定義當前方法或屬性所在的類,而是在實際執行時計算的 可用 get called class 函式來得到被呼叫的方法所在的類名 this是指向當前物件 self 指向當前的類 self就是寫在哪個類裡面,實際呼叫的就是這個類 parent 指向父類 static...

php中後期靜態繫結(延遲靜態繫結)技術

定義乙個父類 這就要用到後期靜態繫結的技術,所謂後期,是指靜態方法的呼叫者,只有在執行狀態下才進行動態繫結,使用關鍵字 static 來實現,此時,static 就像乙個變數,始終與當前的呼叫類是繫結的class father 靜態方法 訪問當前類中的其它靜態成員 public static fun...

PHP高階特性 後期靜態繫結

後期繫結 的意思是說,static 不再被解析為定義當前方法所在的類,而是由最終運算時動態決定。也可以稱之為 靜態繫結 因為它可以用於 但不限於 靜態方法的呼叫。class a publicstaticfunction test class b extends a b test 輸出 class a...