2014-11-25 3 views
-1

는 다음 테스트 클래스를 타고 :전화 다른 클래스의 의존성의 클래스에서 정적 변수?

class A { 
    public static $number = 1; 
} 

class B { 
    protected $a; 

    public function __construct(A $a) { 
     $this->a = $a; 
    } 

    public function getStatic() { 
     echo $this->a::$number; 
    } 
} 

$b = new B(new A); 
$b->getStatic(); 

1을 반환해야 하는가? 확실하지 않습니다. 다른 클래스의 종속성으로 주입 된 후에 한 클래스의 정적 변수에 액세스하려고합니다.

존재 인 이유

, 내가 비동기 적으로 호출 시간을 X됩니다 클래스를 가지고 있지만 10 개 클래스 인스턴스에 대한 업데이트되는 글로벌 정적이 필요합니다. 같은 변수에 10 개의 인스턴스가 필요하지 않습니다.

그렇게 말 프로그래머 정적로 interator 변수, 그것은 각 클래스에 의해 업데이트와 하나 개의 변수를 유지됩니다. 클래스 당 하나의 반복자가 아닙니다.

내가 잘못 했나요? 내가 무서워지고있어 예기치 않은 '::'(T_PAAMAYIM_NEKUDOTAYIM)

답변

1

Class not object를 정적으로 호출한다. 클래스 A의

class A { 
     public static $number = 1; 
} 

class B { 
     protected $a; 

      public function __construct(A $a) { 
       $this->a = $a; 
      } 

      public function getStatic() { 
       $class = get_class($this->a); 
       echo $class::$number 
      } 
} 

$b = new B(new A); 
$b->getStatic(); 

또는 사용 방법은

class A { 
     public static $number = 1; 

     public function getNumber() 
     { 
      return static::$number; 
     } 
} 

class B { 
     protected $a; 

      public function __construct(A $a) { 
       $this->a = $a; 
      } 

      public function getStatic() { 
       echo $this->a->getNumber(); 
      } 
} 

$b = new B(new A); 
$b->getStatic(); 

나중에 선호합니다.

+0

감사합니다. 이 문제에 대한 정답입니다. 그러나 내 문제는이 문제와 관련이 없다고 생각하지만이 문제가있는 사람에게는 이것이 해결 방법입니다. – Anthony

-1

당신은 정적 속성이나 메서드에 액세스 할 수있는 객체를 만들 필요가 없습니다.

그냥 클래스 B 나던 작품에서 :: 수를 메아리/접근?

+0

댓글을 게시하고 평판을 바탕으로 작업하고 싶다면 답변을 게시하고 싶다면 그렇게 보이게하십시오. 응답이 낮아 답변을 답장으로 게시하지 마십시오. 평판이 더 낮아질 수 있습니다. –

관련 문제