2011-11-19 89 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。你可能会有一个想法。