PHP物件導向之後期靜態繫結功能介紹_PHP教程

來源:互聯網
上載者:User

PHP物件導向之後期靜態繫結功能介紹


  本文將對PHP後期靜態繫結功能進行介紹,它主要用於解決在繼承範圍內引用靜態調用的類。

  首先來看下面這個例子:

   代碼如下:

  class Person

  {

  public static function status()

  {

  self::getStatus();

  }

  protected static function getStatus()

  {

  echo "Person is alive";

  }

  }

  class Deceased extends Person

  {

  protected static function getStatus()

  {

  echo "Person is deceased";

  }

  }

  Deceased::status(); //Person is alive

  很明顯,結果不是我們預期的,這是因為self::取決於定義時所在的類,而不是運行中的類。為瞭解決這個問題,你可能會在繼承類中重寫status()方法,更好的解決方案是PHP 5.3後添加了後期靜態繫結的功能。

  複製代碼 代碼如下:

  class Person

  {

  public static function status()

  {

  static::getStatus();

  }

  protected static function getStatus()

  {

  echo "Person is alive";

  }

  }

  class Deceased extends Person

  {

  protected static function getStatus()

  {

  echo "Person is deceased";

  }

  }

  Deceased::status(); //Person is deceased

  可見,static::不在指向當前所在的類,實際上,它是在運行中計算的,強制擷取最終類的所有屬性。

  因此,建議,以後不要再使用self::,使用static::

http://www.bkjia.com/PHPjc/1001667.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1001667.htmlTechArticlePHP物件導向之後期靜態繫結功能介紹 本文將對PHP後期靜態繫結功能進行介紹,它主要用於解決在繼承範圍內引用靜態調用的類。 首先來看...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.