PHP物件導向之後期靜態繫結功能介紹_php執行個體

來源:互聯網
上載者:User

本文將對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::

聯繫我們

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