2012-03-13 2 views
2

가변 변수를 사용하여 $ _GET 및 $ _POST 배열에 모두 동적으로 액세스하려고합니다. 이 작업을 수행하려고하는 이유는 각각에 대해 특정 반복을 선언 할 필요없이 여러 배열에서 유사한 작업을 수행 할 수 있기 때문입니다. 필자는 PHP의 설명서에서 동적 변수에 변수를 사용하여 배열에 액세스 할 수 있다고 말했기 때문에이 방법이 가능할 것이라고 확신하지만 실제로 작동하지는 않습니다. 간단한 데모는 특정 속성이 설정되었는지 확인하려고 할 때입니다. 내가 위의 스크립트를 실행하면 내가 정적으로 수동으로 $ _GET이나 $ _POST, 내가 원하는 결과를 얻을 수를 사용하여 원하는 속성을 추구 할 때

if(isset(${$this->_array}[$property])) { return ${$this->_array}[$property]; } 
else { return null; } 

나는 항상 그러나, null를 얻을. 트리플에 $this->_array$property을 확인했으며 올바른 문자열 값을 반환하고 있습니다. 이러한 배열을 이러한 액세스에 사용할 수 없습니까, 아니면 내가 잘못 했나요?

+3

http://en.wikipedia.org/wiki/Code_smell – ceejayoz

+0

@ceejayoz 경우 잘 모릅니다 : OK? 전에 들었고 개념에 익숙해졌습니다. 당신은 무엇을 말하려고하는? 내 코드가 다른 곳에서 틀린가? 위 문장에 전달 된 변수가 올바른지 이미 확인했습니다. 다른 무엇이 될 수 있는지 확실하지 않습니다. – mseancole

+0

변수 변수를 사용하면 일반적으로 잘못된 것을하고 있다는 표시라고 말하려고합니다. 후속 개발자가 당신을 죽이려하지 않게하는 좋은 방법이 거의 항상 있습니다. – ceejayoz

답변

2

이미 $_GET$_POST을 모두 포함하는 배열이 있습니다. 이름은 $_REQUEST입니다. 그런데 request_order 설정에 따라 $_COOKIE의 내용을 포함 할 수도 있지만 기본값은 $_GET$_POST입니다.

0

both the $_GET and $_POST arrays, among others에 액세스하고 싶습니다.이 '기타'는 무엇입니까? $_REQUEST을 사용하여 $_GET, $_POST$_COOKIE의 내용을 한 번에 확인할 수 있습니다.

3

무엇을 잘못하고 있더라도 변수 변수를 사용하면 상황이 악화 될 수 있습니다. 너 자신의 온건함 때문에 멈추라. 어떠한 상황에서도 프로덕션 코드로 배포해서는 안됩니다. 디버깅은 불가능하며 코드에서 사용하는 것은 다른 사람이 자신의 발로 쓴 것을 읽는 것과 같습니다. 그들이 특히 손재주가 있다면, 아마도 당신은 그들이하는 일을 이해할 수있을 것입니다. 그러나 시간의 99.9999 %, 그냥 정상적인 배열을 사용하는 것이 좋습니다.

그렇다면 $_REQUEST을 시도하십시오.

4

슈퍼 전역 클래스 나 메소드의 내부 변수 변수로 참조 할 수 없습니다, 그래서이 작동합니다

<?php 
$var = "_GET"; 
print_r(${$var}); 

을하지만이되지 않습니다

<?php 
test(); 
function test() { 
    $var = "_GET"; 
    print_r(${$var}); 
} 

내가 더 나은 방식이 있다는 것을 의심 성취하려는 일을하십시오.

http://php.net/manual/en/language.variables.superglobals.php#refsect1-language.variables.superglobals-notes

+0

때가 아니더라도, 이것이 효과가있다. 나는 전체 배열을 인쇄하려고 시도했지만 언급하는 것을 잊어 버렸다. 고마워. – mseancole

+0

내 코드가 작동 했어. 나는 그것이 당신을 위해 작동하지 않았던 이유를 설명하기 위해 나의 대답을 업데이트했다. – jasonlfunk

0

당신은이 작업을 수행 할 수 있지만, 좋은 코딩 연습

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $method = '_POST'; 
} 
else { 
    $method = '_GET'; 
} 
$data = $$method;