日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

前期绑定 php,关于php:后期静态绑定在PHP中的使用

發布時間:2024/9/27 php 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前期绑定 php,关于php:后期静态绑定在PHP中的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么叫前期動態綁定呢?其實咱們在之前的文章PHP中的static中曾經說過這個貨色了。明天咱們還是再次深刻的了解一下這個概念。

首先,咱們通過一段代碼來引入前期動態綁定這一概念:

【騰訊云】云產品限時秒殺,爆款1核2G云服務器,首年99元

class A

{

public static function who()

{

echo __CLASS__, PHP_EOL;

}

public static function test()

{

self::who();

}

}

class B extends A

{

public static function who()

{

echo __CLASS__, PHP_EOL;

}

}

B::test(); // A

在這段代碼中,咱們應用了self關鍵字,當應用B類調用test()靜態方法時,self指向的是A類的who()辦法,因而,輸入的是A。別沖動,這是一般的動態綁定。self關鍵字調用的內容取決于它定義時所在的類。也就是說不管怎么繼承,用哪個子類來調用test()辦法,self關鍵字都會調用的是A類的who()辦法。

而前期動態綁定呢?其實就有點像實例化的類對象,每個實例化的對象,調用的都是本身,而不是父類的屬性辦法。一般的動態調用可不是這樣,然而事實中咱們又有這樣的需要,就像實例化對象的調用形式一樣來調用動態屬性辦法,這時,咱們就能夠應用static關鍵字來實現前期動態綁定。

class C

{

public static function who()

{

echo __CLASS__, PHP_EOL;

}

public static function test()

{

static::who();

}

}

class D extends C

{

public static function who()

{

echo __CLASS__, PHP_EOL;

}

}

D::test(); // D

當應用static關鍵字后,這里D類調用的test()辦法外部調用的who()就是D類本人了。

官網文檔中的定義如下:

當進行靜態方法調用時,該類名即為明確指定的那個(通常在 :: 運算符左側局部);當進行非靜態方法調用時,即為該對象所屬的類。

該性能從語言外部角度思考被命名為“前期動態綁定”。“前期綁定”的意思是說,static:: 不再被解析為定義以后辦法所在的類,而是在理論運行時計算的。也能夠稱之為“動態綁定”,因為它能夠用于(但不限于)靜態方法的調用。

除了self和static關鍵字外,咱們還有一個parent關鍵字,這個關鍵字的意義就很顯著了,調用父類的動態內容。咱們同時用三個關鍵字一起來進行測試:

class E

{

public static function who()

{

echo __CLASS__, PHP_EOL;

}

public static function test()

{

self::who();

static::who();

}

}

class F extends E

{

public static function who()

{

echo __CLASS__, PHP_EOL;

}

}

class G extends F

{

public static function who()

{

parent::who();

echo __CLASS__, PHP_EOL;

}

}

G::test();

// E

// F

// G

最初,咱們再來看兩個PHP的辦法,一個是get_called_class()辦法,用來獲取以后調用的是哪個類。在靜態方法中能夠依據調用形式判斷以后類是哪個類來進行其余的業務邏輯操作。另一個是forward_static_call()辦法,用于靜態方法的調用。

class H

{

public static function who()

{

echo __CLASS__ . ':' . join(',', func_get_args()), PHP_EOL;

}

public static function test()

{

echo get_called_class(), PHP_EOL;

forward_static_call('who', 'a', 'b'); // xxx:a,b

forward_static_call(['I', 'who'], 'c', 'd'); // I:c,d

forward_static_call_array(['H', 'who'], ['e', 'f']); // H:e,f

}

}

class I extends H

{

public static function who()

{

echo __CLASS__ . ':' . join(',', func_get_args()), PHP_EOL;

}

}

function who()

{

echo 'xxx:' . join(',', func_get_args()), PHP_EOL;

}

H::test(); // H

// xxx:a,b

// I:c,d

// H:e,f

I::test(); // I

// xxx:a,b

// I:c,d

// H:e,f

留神,如果forward_static_call()不指定類名的話,將調用全局的辦法。forward_static_call_array()則是將參數應用數組進行傳遞。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/%E5%90%8E%E6%9C%9F%E9%9D%99%E6%80%81%E7%BB%91%E5%AE%9A%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8.php

參考文檔:

https://www.php.net/manual/zh/language.oop5.late-static-bindings.php

https://www.php.net/manual/zh/function.get-called-class.php

https://www.php.net/manual/zh/function.forward-static-call.php

各自媒體平臺均可搜尋【硬核項目經理】

總結

以上是生活随笔為你收集整理的前期绑定 php,关于php:后期静态绑定在PHP中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。