2014-02-14 146 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