簡體   English   中英

php-從擴展類調用靜態函數

[英]php - calling static function from a extended class

我無法設法從擴展類中調用靜態函數(帶有常量)。 這是我的代碼:

(1st file)
class A
{                        
    function isXSet()
    {
        return X;
    }        
    public static function setX()
    {
        define('X', 1);
    }
}  

(second file)

include('/*first file*/');
class B extends A
{        
    A::setX();        
}

我該怎么做呢?

您的代碼在這里

class B extends A
{        
    A::setX();        
}

有點不對勁。 您沒有將調用放入方法內部。

class B extends A
{   
    public static function doSomething() {     
        A::setX();
    }
}

實際上,這不是通過父子關系來做任何事情。 實際上,在定義class A ,對A::setX()的調用可以在任何地方發生,因為它是公共的和靜態的。 這段代碼同樣有效:

class A
{
    function isXSet()
    {
        return X;
    }
    public static function setX()
    {
        define('X', 1);
    }
}

class B { // No extending!
    function isXSet() {
        return A::isXSet();
    }
}

您更可能尋找的是parent

class A
{
    public function isXSet()
    {
        return X;
    }

    protected static function setX()
    {
        define('X', 1);
    }
}

class B extends A
{   
    public static function doSomething() {     
        parent::setX();
        var_dump( parent::isXSet() ); // int(1)
    }
}

這里的一大優點是擴展類可以從parent類訪問受保護的方法和屬性。 這意味着你可以從能夠調用保持每個人A::setX()除非是被調用的一個實例或孩子A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM