2011-11-19 4 views
-1

저는 PHP에 대해 배우고 있으며 전역 변수/범위 문제에 대한 도움이 필요합니다. 나는 외부 기능에 $myvars의 값에 액세스해야합니다도움이 필요하십니까 PHP 변수 액세스 : 가변 범위 및 전역

function outer() { 
    function inner($atts) { 
     $myvars = $atts['mydata']; 
    } 
    // I need to access the value of $myvars in here: 
    $jsonized = json_encode($myvars); 
} 

function set_atts_func($atts) { 
    inner($atts); 
} 

add_shortcode("my_short_code", "set_atts_func"); 

내가만큼 내가 할 수있는 문제를 단순화했습니다. 이 플러그인은 WordPress 플러그인의 일부입니다. 다음과 같이 나는 $myvars 글로벌 만드는 시도했다 :

function inner($atts) { 
    global $myvars; 
    $myvars = $atts['mydata']; 
} 

을하지만, 나는 그것을 파악하지 않았습니다. 어떤 제안?


추가 정보 :

누군가가 중첩 된 기능을 사용하는 것보다 내 문제를 해결하는 더 좋은 방법이 있다면, 나는 그것을 듣고 싶네요.

내 사이트의 WordPress 플러그인 용입니다. 즉, $atts을 자바 스크립트에 전달해야합니다.

롱 스토리 : add_shortcode() 라인은 set_att_func()으로 전화를 걸어 $atts에 액세스 할 수 있습니다. $atts을 js로 전달하려면 WordPress의 wp_localize_script() 함수를 사용합니다.

그러나이 함수는 wp_localize_script() 호출에서 참조 된 스크립트 매개 변수가 wp_enqueue_script()에 대기열에 포함 된 경우에만 호출 할 수 있습니다. 적어도 내가 알 수있는 한이 함수는 wp_enqueue_script()에 대기열에 포함됩니다. set_atts_func() (으)로 wp_localize_script()wp_enqueue_script() 전화를 걸어 보았습니다. 그래서 $attsouter()에 넣으려고합니다. 여기에서 wp_localize_script()wp_enqueue_script() 호출이 있습니다.

$attsouter()에 액세스하는 더 쉽고 간단한 방법이 있으면 알려 주시기 바랍니다.

+1

또 하나의 함수 인 코드를 정의 할 필요가 없습니다 –

+0

또한 [PHP 중첩 함수는 무엇입니까?] (http://stackoverflow.com/questions/415969/what-are-php-nested)에 대한 대답을 참조하십시오. -functions-for) - TL : DR : 사용하지 않으므로 사용하지 마십시오. – Tomalak

+0

@Col. Shrapnel, 메시지를 보내 주셔서 감사합니다. 추가 정보를 추가했습니다. 당신이 제안이나 해결책을 가지고 있다면, 나는 그것을 듣고 싶습니다. 감사. – Laxmidi

답변

0

변수를 전역으로 설정하려면 액세스 할 수있는 최상위 (클래스 또는 계층) 수준에서 변수를 정의한 다음 다른 함수 내에서 정의 할 때 global 키워드를 사용해야합니다. 예 : 나는 주로 객체 지향 접근이에 일한

$myvas = ''; 
function inner($atts) { 
    global $myvars; 
    $myvars = $atts['mydata']; 
    set_atts_func('pass argument'); 
} 

function set_atts_func($avar) { 
    global $myvars; 
    // .... 
} 
1

, u는 글로벌 정의 할 변수는이 같은 기능을 정의 위에 선언해야합니다.

> var $x; 
function myfunc($x) 
{ 
$this->x = 'dd';  
} 

및 u는 클래스의 인스턴스를 만들 때 U 단순히 기능이 myfunc() 및 그것의 값 후 변수 x가되도록 dd는 호출 할 수있다. 너는 아이디어를 가질 수 있을까?