2014-02-14 8 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; 

그래서 당신의 exemple를 사용하여, 정적의 목적을 이해하는

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

관련 문제