2011-11-19 86 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傳遞給JavaScript腳本。

長篇小說:add_shortcode()行呼籲set_att_func()並讓我訪問$atts。爲了將$atts傳遞給js,我將使用WordPress'wp_localize_script()函數。

但是,只有在wp_localize_script()調用中引用的腳本參數已被列入wp_enqueue_script()的範圍內,才能調用此函數 - 至少據我所知。我已經嘗試將wp_localize_script()wp_enqueue_script()呼叫移至set_atts_func(),但沒有任何運氣。所以,我試圖$attsouter(),其中wp_localize_script()wp_enqueue_script()調用。

如果有更簡單和更簡單的方法來訪問outer()中的$atts,請告訴我。

+1

定義一個函數的另一個函數insode沒有意義 –

+0

另請參閱[什麼是PHP嵌套函數?]的接受答案(http://stackoverflow.com/questions/415969/what-are-php-nested -functions-for) - TL; DR:他們沒有用,所以不要使用它們。 – Tomalak

+0

@Col。彈片,感謝您的留言。我已經添加了一些額外的信息。如果您有建議或解決方案,我很樂意聽到它。謝謝。 – Laxmidi

回答

0

要使變量爲全局變量,請在希望可訪問的最高級別(層級或層次)級別上定義它,然後確保在任何其他函數中定義該變量時使用全局關鍵字。例如:

$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。你可能會有一個想法。