首頁 >後端開發 >php教程 >php中非轉發呼叫以及轉發呼叫的程式碼實例

php中非轉發呼叫以及轉發呼叫的程式碼實例

不言
不言原創
2018-08-10 10:37:262553瀏覽

這篇文章帶給大家的內容是關於php中非轉發呼叫以及轉發呼叫的程式碼實例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

靜態存取類別的成員:

1.非轉送呼叫

#1)類別名稱明確(A::funcA())    

#2.轉送呼叫

    1)self::
    2)parent::
    3)static::
    4)forward_static_call()
    5)get_called_class()

注意:
「後期綁定」的意思是說,static:: 不再被解析為定義當前方法所在的類,而是在實際運行時計算的。也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的呼叫。

<?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
Note:
在非靜態環境下,所呼叫的類別即為該物件實例所屬的類別。由於 $this-> 會在相同作用範圍內嘗試呼叫私有方法,而 static:: 則可能會給出不同結果。另一個差異是 static:: 只能用於靜態屬性。

繼承的財產屬於自己

繼承鏈 優先存取當前類別,依據保留字特性進行存取,然後依據繼承鏈進行存取。

$this 存取成員(呼叫上下文)

self:: 存取成員(解析上下文)

<?php
 
class A{
    protected $value = "A value";
 
    public function printValue(){
        echo $this->value;
    }
}
class B extends A{
   protected $value = "B value";
}
$app = new B();
$app->printValue();
运行结果:B value
<?php
 
class A{
    //只有将属性定义为静态的才能使用self::进行调用
    static protected $value = "A static value ";
    public function printValue(){
        echo self::$value;
    }
}
 
class B extends A{
    static protected $value = "B static value";
}
 
$app = new B();
$app->printValue();
运行结果:A static value
<?php
class A{
    static protected $value = "A static value ";
}
 
class B extends A{
    public function printValue(){
        echo self::$value;
    }
}
$app = new B();
$app->printValue();
运行结果:A static value

相關推薦:

#PHP想要實現頁面跳轉功能具體怎麼操作? (函數標籤範例)

php下拉選單及多層欄位怎麼實現的? (程式碼實測)

php和html結合實作上傳圖片檔案到伺服器的程式碼

以上是php中非轉發呼叫以及轉發呼叫的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn