2014-02-14 183 views
0

簡單的問題是否可以從$this->調用中訪問靜態變量?訪問類中的靜態變量

class testA 
{ 
    public static $var1 = "random string"; 

    // current solution 
    public function getVar() 
    { 
     return self::$var1; 
    } 
} 

class testB 
{ 
    private $myObject; 

    public function __construct() { 
     $this->myObject = new testA(); 

     // This line is the question 
     echo $this->myObject::var1; 

     // current solution 
     echo $this->myObject->getVar(); 
    } 
} 

恐怕我已經回答了我自己的問題。但是有幾個靜態變量,我不想爲每個變量都有一個函數,或者當我可以直接訪問它時,甚至可以使用一個單獨的函數getVar($staticVar)

如果這是唯一的解決方案。任何建議,以更好的方式來實現這一點。

如果我要爲每個函數調用一個函數,我可能完全擺脫靜態變量。

//method 
public function staticVar1() { 
    return (string) 'random string'; 
} 
+0

'testA :: var1' ... – Passerby

+0

是的,這是正確的。我想我需要離開電腦一小時。休息一下:) – Bradmage

回答

1

您只需訪問變量是這樣的:

testA::$var1; 

所以使用爲例,這將是

class testB 
{ 
    private $myObject; 

    public function __construct() { 
     $this->myObject = new testA(); 

     // This line is the question 
     echo testA::$var1; 

     // current solution 
     echo $this->myObject->getVar(); 
    } 
} 
+0

哦,是啊。如果有人問這個問題,我可能會回答一些問題。談論過度思考。謝謝。 – Bradmage

+0

它發生在每個人^^ – Hipny

1

試着去了解的靜態的目的。

static使它們可以訪問,而無需實例化類。

他們應該如下如果靜態變量被訪問的類

self::$var1; 
下面

可能你的情況

testA::$var1; 

將在這裏做的工作。

+0

感謝但'self :: $ var1;'是不正確的,因爲它正在類外部訪問。正如我正在評論的那樣,你更新了你的答案。 'testA :: $ var1;'會做的。 – Bradmage

+0

我已經提到了這兩種情況,所以你可以得到它的想法 – Techie

+1

是的,我明白,對於任何人都有同樣的問題。這只是一個大腦死亡的時刻。如前所述。無論如何,給你一個投票吧:) – Bradmage