關於後期靜態繫結,該怎麼解決

來源:互聯網
上載者:User
關於後期靜態繫結
看了php手冊中關於後期靜態繫結,還是不太明白,原文地址http://cn2.php.net/manual/zh/language.oop5.late-static-bindings.php

其中第四個例子
PHP code


結果是:
A
C
C
當調用到parent::foo()和self::foo()時,為什麼會調用C類的who()?
哪位朋友能解釋一下,謝謝。

------解決方案--------------------
關於static操作符的解釋:
後期靜態繫結試圖通過引入一個關鍵字表示運行時最初調用的類來繞過限制。
而這個最初調用的類就是C

A::foo(); 調用的是A類的方法,這你明白
self::foo(); // 這個self實際上是C類。明白嗎? C::test() C繼承了B的test()方法
parent::foo(); // 由於static::who(); 而不是self::who()。該方法調用的當前的類,也就是C類的foo()方法

也許你覺得還是弄不懂 A類中又為什麼沒有調用C的who()方法,這是由於parent的特殊關係。延遲靜態繫結就是專門為瞭解決子類與父類間繼承方法的問題才出現的。
------解決方案--------------------
手冊不是說得很清楚麼
------------------------------------------------------
”後期綁定“的意思是說,static::不再被解析為定義當前方法所在的類,而是在實際運行時計算的。也可以稱之為”靜態繫結“,因為它可以用於(但不限於)靜態方法的調用。
-------------------------------------------------------

#1說的有個小問題

PHP code
self::foo(); // 這個self實際上是C類。明白嗎? C::test() C繼承了B的test()方法
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.