php延遲靜態綁定

PHP5.3之後引入了延遲靜態綁定static,它是爲了解決什麼問題呢?php的繼承模型中有一個存在已久的問題,那就是在父類中引用擴展類的最終狀態比較困難。來看一個例子。php

static與self的區別:
self是類內指針,指向本類的靜態方法和屬性
static使得父類能訪問子類的重載靜態方法spa

 

<?php
class A
{
    public static function echoClass(){
        echo __CLASS__;
    }
    public static function test(){
        self::echoClass();echo '<br/>';//輸出A
        static::echoClass();//輸出C
    }
}
class B extends A
{

    public static function echoClass()
    {
        echo __CLASS__;
    }
}
class C extends A
{

    public static function echoClass()
    {
        echo __CLASS__;
    }
}
C::test(); 

說明:指針

(1)使用關鍵字static表示哪一個類調用,就表明那個類。code

(2)static::方法名():使用static關鍵詞,則首先是在子類裏查找該方法;若是找不到,則到父類中查找blog

上面代碼中繼承

 self::echoClass();  ==  A::echoClass();    //因此輸出Aio

 static::echoClass();    == C::echoClass();  //因此輸出Cfunction

做用:class

父類中引用擴展類的最終狀態比較困難,用static能解決test

相關文章
相關標籤/搜索