PHP後期靜態綁定實例淺析

本文原創自news.mkq.online
版權聲明:本文爲原創文章,版權牛站科技所有
轉載請註明http://www.niuzhan.com/keji/

本文實例講述了PHP後期靜態綁定。分享給大家供大家參考,具體如下:

從php5.3開始,php增加了一個叫後期綁定的功能,用於在繼承範圍內引用靜態調用的類

該功能從語言內部角度考慮北命名爲“後期靜態綁定”;“後期綁定”意思說:static::不再被解析爲定義當前方法所在的類,而是在實際運行時計算的,也可以成爲“靜態綁定”;因爲他可以用於(但不限於靜態方法的調用)。

self::的限制

使用self::或者_class_對當前類的靜態引用,取決於定義當前方法所在的類

例子:
01
class A {
02
public static function who() {
03
echo CLASS;
04
}
05
public static function test() {
06
self::who();
07
}
08
}
09
class B extends A {
10
public static function who() {
11
echo CLASS;
12
}
13
}
14
B::test(); //A

打印結果:

A

後期靜態綁定的用法

後期靜態綁定試圖通過引入一個關鍵字表示運行時最初調用的類來繞過限制。簡單的說,這個關鍵字能夠讓你在上述中調用test()時引用的類是B而不是A。最終決定不引用新的關鍵字,而是使用已經預留static關鍵字

例子:
01
<?php
02
class A {
03
public static function who() {
04
echo CLASS;
05
}
06
public static function test() {
07
static::who(); // 後期靜態綁定從這裏開始
08
}
09
}
10
class B extends A {
11
public static function who() {
12
echo CLASS;
13
}
14
}
15
B::test();
16
?>

打印結果是:

B

後期靜態綁定的處理方式解決了以往完全沒有解決的靜態調用,另外一方面,如果靜態調用使用parent::或者self::將轉發調用信息
01
<?php
02
class A {
03
public static function foo() {
04
static::who();
05
}
06
public static function who() {
07
echo CLASS."\n";
08
}
09
}
10
class B extends A {
11
public static function test() {
12
A::foo();
13
parent::foo();
14
self::foo();
15
}
16
public static function who() {
17
echo CLASS."\n";
18
}
19
}
20
class C extends B {
21
public static function who() {
22
echo CLASS."\n";
23
}
24
}
25
C::test();
26
?>

打印結果:

A
C
C

例子:
01
<?php
02
class a {
03
static public function test() {
04
print get_called_class();
05
}
06
}
07
class b extends a {
08
}
09
a::test();
10
b::test();
11
?>

打印結果:

a
b

特別聲明:

get_called_class();獲得類的名稱靜態方法中調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章