需要帮助访问PHP变量:可变范围&全局

时间:2011-11-19 07:14:51

标签: php function global-variables scope

我正在学习PHP,我需要一些关于全局变量/范围问题的帮助。我需要在外部函数中访问$myvars的值:

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()而没有任何运气。所以,我正试图将$atts转换为outer() wp_localize_script()wp_enqueue_script()来电。

如果有更简单,更轻松的方式来访问$atts中的outer(),请与我们联系。

2 个答案:

答案 0 :(得分:1)

我主要从事面向对象的方法,在这里,你想要定义为全局的变量应该在这样的函数定义之上声明。

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

当你创建类的实例时你可以在函数myfunc()之后简单地调用该变量x,它的值将是dd。愿你有个主意。

答案 1 :(得分:0)

要使变量成为全局变量,请在希望可以访问它的最高(类或层次结构)级别定义它,然后确保在任何其他函数中定义它时使用global关键字。例如:

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

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