我正在学习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()
,请与我们联系。
答案 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;
// ....
}