您好,登錄后才能下訂單哦!
怎么在PHP中實現后期靜態綁定?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
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
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。