2011-03-19 5 views
2

지금 당장은 내 수업 시스템을 핵심 수업에 포함시켜야합니다.모든 기능 대신 글로벌 하나를 설정 하시겠습니까?

$cms->userClass->function(); 

그러나 이것은 내가 내 된 UserClass에있는 모든 기능을 위해, 내가 지속적으로 추가 할 필요가 있음을 의미합니다 : 그래서 난 내 클래스는 다음과 같은 전화

global $cms; 

는 다음과 같이 데이터베이스 클래스에 액세스 할 수 있도록 그러한 :

모든 기능의 시작 부분에 정의하지 않고 전체 클래스에 전역을 설정할 수있는 방법이 있습니까? 대신 당신이 당신의 자신의 클래스를 구축하고 클래스 내에서 하나의 속성을 설정하고 $ this-> var에 의해 모든 것을 액세스 할 수있는 클래스 내에서 그 기능을 넣을 경우, 모든 곳에서 함수를 사용

+1

관련 항목 : http : //stackoverflow.c om/questions/1812472/in-a-php-project-how-do-do-do-helper-objects 사용자의 도우미 객체 구성 및 액세스 – Unicron

답변

5

....

$class = new MyClass($cms); 
echo $class->cms; //doesn't work cause it's private 

class MyClass() { 
    private $cms; //private so it's only accessible within this class 

    function __construct ($cms) { 
     $this->cms = $cms; 
    } 

    //all your functions here can use $this->cms 
    function myFunction() { 
     echo $this->cms->func(); //this will work 
    } 
} 
+0

의존성 주입과 함께 사용하는 경우이 접근법은 매우 유연 할 수 있습니다. –

+2

나는 $ cms *를 공개로 설정해야합니다. 여기에 $ twms *가 있어야합니다. 그렇다면 $ cms의 컨텍스트는 실행 중에 실수로 변경 될 가능성이 훨씬 적습니다. – CaseySoftware

+0

+1 @Webnet 및 @CaseySoftware. – lonesomeday

1

클래스에 대해 전체적으로 생각하지 않습니다.

그러나, 대안의 몇 :

  • 때문에, 클래스의 글로벌 $ CMS를 변수에 대한 참조가 :

    :

    private $cmsref; 
    function __construct(){ 
        global $cms; 
        $this->cmsref = &$cms; // $this->cmsref will be a reference to $cms now 
    } 
    
  • 는 자동 전역 $의 _GLOBALS를 사용

    function foo(){ 
        // to access $cms: 
        $_GLOBALS["cms"]; 
    } 
    
+0

[지구본은 악합니다] (http://stackoverflow.com/questions/5166087/php-global-in-functions/5166527#5166527) – Gordon

관련 문제