2012-02-13 4 views
0

다음 클래스가 있는데 가변 배열 이름을 사용할 수 있는지 알고 싶습니다.PHP 가변 배열 이름

class Ajax{ 
    private $method; 

    public function __construct(){ 
     $this->method = '$_' . $_SERVER['REQUEST_METHOD']; 
    } 
} 

그래서 기본적으로 $ 방법 변수는 POST를 포함하거나 방법을 받아야 하나, 다음 질문은 여기 참조를 사용하는 스마트 경우도?

$this->method = '$_' . $_SERVER['REQUEST_METHOD']; 
$this->metod =& $$this->method; 

그러나 그것은 작동하지 않습니다 :

내 첫번째 생각이었다.

감사와 도움을 주셔서 감사합니다.

+0

무엇을 원하니? '$ _POST' 또는'$ _GET'을'$ this-> method'에 넘기는 것을 의미합니까? – xdazz

+0

@xdazz 내가 첫 번째 답변에 게시 한 코멘트를 확인 :) 어쨌든 코멘트 주셔서 감사합니다. – randomKek

+0

$ this-> 메소드는 $ _POST 또는 $ _GET을 포함 할 것입니다. 하지만, 참조 변수가 '$ _ POST'또는 $ _GET 인 경우에도 과 같지 않습니다. – Poonam

답변

1

왜 그때,

$this->method = ${'_'.$_SERVER['REQUEST_METHOD']}; 

If ($_SERVER['REQUEST_METHOD'] === 'GET') { 
    $this->method = $_GET; 
} else if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    $this->method = $_POST; 
} 

직접 작업 할 경우

하지 아니면 그냥 사용할 수있는 $_REQUEST (그것을 사용하는 아주 좋은 것은 아니지만)

$this->method = $_REQUEST; 
+0

그래, 내가 그 중 하나를 알아 냈어, 만약 내가 IF 문없이 그것을 사용할 수 있다면, 어쨌든 이것을 사용할 수 있는지 알고 싶었다. $ this-> method = & $ _GET을 사용하는 것이 좋은지 알고 계시나요? – randomKek

+0

참조가 필요하지 않습니다. – xdazz

+0

나는 그것이 필요하지 않다는 것을 안다. 그러나 우리가 메모리에 두 번 데이터를 가지고있는 참조를 사용하는 것이 현명 할 것인가? – randomKek

1

당신은 "variable variable는"($$ 이중에주의) 인

$this->method = $$_SERVER['REQUEST_METHOD']; 

같은 것을 할 것입니다. 그러나하지 마십시오. 가변 변수는 디버그하기 어려운/불가능한 코드를 만듭니다.

+0

제 아이디어는 3 개의 변수, 1 json, 2. errors, 3. 메소드로 아약스 컨트롤러를 만드는 것입니다. 컨트롤러의 액션이 호출되면 요청 배열을 가리키는 메소드 변수를 사용하여 화이트리스트 유효성 검사를 사용하고 유효성 검사가 통과되면 json 변수를 설정하고 마지막으로 클래스의 소멸자가 echo json_encode ($ this- > json). 우리가 간단한 방법으로 화이트리스트 검증을 사용하여 멋진 솔리드 아약스 클래스를 얻었습니다. – randomKek

+0

POST 또는 GET 배열을 가리키고 있지 않습니다. $ this-> 메서드를 출력 할 때 POST가 데이터를 포함하고있는 동안 NULL을 반환합니다. – randomKek

+0

그래서 "내가 좋아하는 것"이라고 말했어. 이것은 "POST"가 아니라 "_POST"로 평가 될 것이므로 _post 데이터 배열을 실제로 지정하지는 않습니다. –

1

다음과 같이하십시오.

$this->method = ${'_' . $_SERVER['REQUEST_METHOD']};