2010-06-30 3 views
1

이런 일이 가능하다면 나는 생각 해왔다.PHP 범위에 대한 질문

// this creates a variable $test in the scope it was called from 
function create_var() {} 

class A { 
    function test() 
    { 
    create_var(); 
    // now we have a local to var() method variable $test 
    echo $test; 
    } 
} 

그래서 create_var() 함수는 범위 외부에서 변수를 만들 수 있지만 전역 범위에서 변수를 만들 수 없습니까? 예를 들어 extract() 함수가 있습니다 - 배열을 가져 와서 호출 한 범위에 변수를 만듭니다.

답변

3

아니요, 가능하지 않습니다. 함수 내에서만 전역 범위에 액세스 할 수 있습니다.

create_var()은 연관 배열을 반환 할 수 있습니다. 당신 수 extract() 그 함수에 : 당신이 원하는 무엇을 조금 더 가까이

function create_var() 
{ return array("var1" => "value1", "var2" => "value2"); } 

class A { 
function test() 
{ 
    extract(create_var()); 
    // now we have a local to var() method variable $test 
    echo $test; 
} 
} 

뭔가 새로운 closures 기능을 사용하여 PHP 5.3에서 가능하다. 그래도 변수를 미리 선언해야하기 때문에 실제로 적용되지 않습니다. 동일 create_var()에 변수 참조를 전달 간다 : 경고의 create_var(&$variable1, &$variable2, &$variable3....)

단어 :이 중 가장 좋은 코딩 연습 것없는 상황을 생각할 수 있습니다. extract()을 사용할 때는 변수를 무차별로 가져 오기 때문에주의하십시오. 그것 없이는 일하는 것이 대부분 더 좋다.

+0

감사합니다. 나는 모든 것을 알고 있었고, 나는 비밀리에 그것이 가능할 것으로 기대하고있었습니다. 글쎄, 나는 추출물과 함께 사용하지 않을 것이고, 기본적으로 POST 나 GET 등에서 가져온 매개 변수 중 일부를 추출하는 함수가 필요합니다. 그리고 저는이 배열에서 특정 변수로 추출()을 사용하기를 원하기 때문에 가장 쉬운 해결책은 제공 한 것과 같습니다. 그러나 나는 단지 다음과 같은 것을 할 수 있다면 좋을 것입니다 : extractvars ('field1, field2, field3')는 배열과 같은 것보다 더 깨끗하게 보입니다.] – Marius