2009-12-18 2 views
5

이것은 분명해야하지만 PHP 가변 범위에 대해 다소 혼란스러워집니다.PHP를 사용하는 생성자 내의 전역 변수

나는 동일한 클래스의 함수에서 나중에 사용하려는 생성자 내에 변수가 있습니다. 내 현재 방법은 다음과 같습니다.

<?php 

class Log(){ 

    function Log(){ 
     $_ENV['access'] = true; 
    } 

    function test(){ 
     $access = $ENV['access']; 
    } 

} 

?> 

악용하는 환경 변수보다 더 나은 방법이 있습니까? 감사.

답변

17

당신의 ... 클래스 컨텍스트가 클래스 변수, 사용할 수 있습니다 : PHP 5에 대한
(예, 물론, 코드를 더욱 PHP5-가 그래서 나는 몇 가지를 작성 다시 한 당신은 한 번 봐해야

class Log { 
    // Declaration of the propery 
    protected $_myVar; 

    public function __construct() { 
     // The property is accessed via $this->nameOfTheProperty : 
     $this->_myVar = true; 
    } 

    public function test() { 
     // Once the property has been set in the constructor, it keeps its value for the whole object : 
     $access = $this->_myVar; 
    } 

} 

) 호환이 특정 질문에, 하위 섹션,

+1

클래스가 유효 한 후에()가 유효하다고 생각하지 않습니다 ...? – SeanJA

+1

@SeanJA : 물론 네, 맞습니다. 나는 OP에서 코드를 복사하여 붙여 넣은 것을 보지 못했습니다. ;; 메모 해줘서 고마워! –

+0

그래, 내가 그것을 내 물건에 붙이고있을 때 나는 그것을 놓쳤다 ... – SeanJA

0

당신은 글로벌 키워드 사용할 수 있습니다

class Log{ 
    protected $access; 
    function Log(){ 
     global $access; 
     $this->access = &$access; 
    } 
} 

을하지만 당신은 정말 생성자에서 변수를 전달해야합니다

class Log{ 
    protected $access; 
    function Log($access){ 
     $this->access = &$access; 
    } 
    //...Then you have access to the access variable throughout the class: 
    function test(){ 
     echo $this->access; 
    } 
} 
+1

-1 무엇을 위해서? 그는 글로벌 변수를 원했습니다. – SeanJA

+0

Log()는 __construct() 여야하며 두 메서드 모두 public 키워드가 누락되어 있습니다. – Gordon

+0

php 4와 호환되기를 원하는 경우가 아니라면 ... log() – SeanJA

3

전역는 유해한 것으로 간주됩니다. 이것이 외부 종속성이면 생성자를 통해 전달하고 나중에 사용할 수 있도록 속성 내에 저장합니다. 테스트 호출 중에 만 설정해야하는 경우 해당 메소드에 대한 인수로 삼는 것이 좋습니다.

+0

그게 내가 예를 들어, -1 나를 위해 말한 것입니다! – SeanJA