2011-03-06 10 views
3

클래스의 대부분의 함수에서 외부 PHP 파일의 일부 변수에 액세스해야합니다.PHP - 클래스의 모든 함수에서 전역 변수에 액세스하기

class test{ 

function a(){ 
    global $myglobalvar ; 
    .. 
    .. 
    } 

function b(){ 
    global $myglobalvar ; 
    .. 
    .. 
    } 

function c(){ 
    global $myglobalvar ; 
    .. 
    .. 
    } 

} 

내가 각 기능에 선언하지 않고 클래스의 모든 기능에 $ myglobalvar에 액세스 할 수있는 방법이 있나요 나는 방법을 다음에 접근하고있어 (그리고 그것을 잘 작동합니다)? 클래스의 생성자에서 한 번만 선언하면됩니다.하지만 어떻게 해야할지 잘 모릅니다. 도움 주셔서 감사합니다. 각 방법에 $this->myglobalvar를 통해 전 세계에 aceess 수 있습니다

class test{ 

    function __construct() { 
     $this->myglobalvar = & $GLOBALS["myglobalvar"]; 

:

+7

PHP의 방법은 당신에게 "이 똥을 멈추라, 틀리게하고있다"라고 말합니다. PHP는 좋은 코드에 열광하는 언어 중 하나가 아닙니다. – delnan

+1

@ 델 난 : 첫 번째 부분은 +1, 두 번째 부분은 -2입니다. – markus

+0

해당 변수를 개체 수준으로 만들기 –

답변

14
class test{ 

private $myglobalvar; 

public function __construct($var){ 
    $this->myglobalvar = $var; 
} 

function a(){ 
    echo $this->myglobalvar; 
} 

function b(){ 
    echo $this->myglobalvar; 
} 

function c(){ 
    echo $this->myglobalvar; 
} 

} 

$test = new test("something"); 
$test->a(); // echos something 
$test->b(); // echos something 
$test->c(); // echos something 
+0

전역 선언이 누락되었습니다. – RDL

+3

@RDL이 디자인의 핵심은 개체의 범위가 적절하게 격리되고 특정 명명에 의존하지 않도록 전역이 생성자를 통해 전달된다는 것입니다. 외부 자원. 재사용을 촉진합니다. –

4

당신은 (많은 global 같은 것) 생성자에서 전역 변수에 참조을 만들 수 있습니다.

+3

그게 효과가 있겠지만, 왜 사람들이 코드 냄새를 맡는 지 가르쳐 주시겠습니까? – Gordon

2

이 사례에 대해 자세히 알려 주시면 문제를 해결하는 더 좋은 방법을 알려 드릴 수 있습니다. 가능할 때마다 세계는 피해야한다. 정말로 변수에 대해 이야기하고 있습니까? 아니면 전체 서버 라운드 트립 중에 동일하게 유지되는 구성 옵션과 비슷합니까? 이 경우 구성 옵션처럼 처리하고 레지스트리 개체 (싱글 톤)에 저장할 수 있습니다.

관련 문제