2009-06-23 5 views
0

외부 변수에 액세스하는 특정 PHP 클래스 메서드가 있습니다. 이러한 변수는 인수로 전달되지 않고 메서드의 코드에서 직접 사용됩니다.클래스 메서드 코드가 외부 변수에 직접 액세스해야합니까?

하나의 방법은 설정 파일에서 DEFINEd 변수를 사용합니다.이 변수는 필요로하는 앱의 모든 부분에서 사용할 수 있습니다. 이것은 나에게 잘 된 것 같습니다.

다른 방법은 $ _GET var에 직접 액세스합니다. 이 var이 설정되지 않은 경우를 처리하는 코드가 있지만 어쨌든이 코드는 나에게 냄새가 난다.

내가 수행해야하는이 두 가지 사례 또는 엄격한 인수 형 규칙을 사용해야합니까?

답변

1

이미 PHP 클래스로 작업하고 있으므로 아키텍처를 변경할 가능성이 있으므로 가능한 한 외부 변수에서 분리 해보십시오. 하위 호환성을 필요로하는 경우 기본 변수를 설정할 수도 있습니다.

class Bla 
{ 
    public function blaBla($var = false) 
    { 
     if(!$var && isset($_GET)) 
      $var = $_GET; 
     // ... 
    } 
} 

$bla = new Bla(); 
$bla->blaBla(); 
$bla->blaBla($_GET); 

(나는 Zend Framework 레지스트리와 같은 싱글 톤 변수 레지스트리를 선호합니다.) define() 메소드가 마음에 들지 않습니다. 하나의 큰 문제는 더 이상 정의를 변경할 수 없다는 것입니다. 이것은 좋을 수도 있고 그렇지 않을 수도 있습니다. 나는 define() 부분이 암호화되어있어 소스 코드 전체에 걸쳐 "Hooks"를 가지고 있음에도 불구하고 더 이상 변경할 수있는 방법이 없다. (그러나 클래스 메소드는 그것을 전달하는 대신 정의를 사용하게했다. 논쟁 ... 이것은 내 눈에 아주 나쁜 건축이다).

1

(http) 요청 및 구성 파일을 모델링하고 이러한 모델의 API를 통해 이러한 변수에 액세스하십시오.

관련 문제