本文實例講述了PHP后期靜態綁定。分享給大家供大家參考,具體如下:
從php5.3開始,php增加了一個叫后期綁定的功能,用于在繼承范圍內引用靜態調用的類
該功能從語言內部角度考慮北命名為“后期靜態綁定”;“后期綁定”意思說:static::不再被解析為定義當前方法所在的類,而是在實際運行時計算的,也可以成為“靜態綁定”;因為他可以用于(但不限于靜態方法的調用)。
self::的限制
使用self::
或者_class_
對當前類的靜態引用,取決于定義當前方法所在的類
例子:
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); //A
打印結果:
A
后期靜態綁定的用法
后期靜態綁定試圖通過引入一個關鍵字表示運行時最初調用的類來繞過限制。簡單的說,這個關鍵字能夠讓你在上述中調用test()時引用的類是B而不是A。最終決定不引用新的關鍵字,而是使用已經預留static關鍵字
例子:
?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 后期靜態綁定從這里開始
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
?>
打印結果是:
B
后期靜態綁定的處理方式解決了以往完全沒有解決的靜態調用,另外一方面,如果靜態調用使用parent::或者self::將轉發調用信息
?php
class A {
public static function foo() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
?>
打印結果:
A
C
C
例子:
?php
class a {
static public function test() {
print get_called_class();
}
}
class b extends a {
}
a::test();
b::test();
?>
打印結果:
a
b
特別聲明:
get_called_class()
;獲得類的名稱靜態方法中調用
更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:- PHP后期靜態綁定之self::限制實例分析
- PHP類與對象后期靜態綁定操作實例詳解
- 詳解PHP后期靜態綁定分析與應用
- PHP面向對象之后期靜態綁定功能介紹
- PHP Static延遲靜態綁定用法分析
- PHP延遲靜態綁定示例分享
- 簡單談談php延遲靜態綁定
- php5.3后靜態綁定用法詳解
- php延遲靜態綁定實例分析
- PHP延遲靜態綁定的深入講解