在我的Wordpress函数中无法访问全局变量。为什么不?

时间:2015-03-01 04:26:22

标签: php wordpress global-variables php-include

我在wordpress工作,并在functions.php中有一个功能。这是为了根据变量的上下文设置一些变量。但是存在问题。

我在包含的模板文件中使用该函数,该函数用于处理包含模板文件的页面上的变量。我在函数中声明所有变量都是全局变量,但函数不识别变量的值。我不明白为什么会这样,因为我确信变量范围正在被正确使用。

为了清除混淆,我在下面列出了一个简化的代码示例,显示了此问题涉及的三个文件。如果有人知道为什么会这样,我会很高兴听到它。我有兴趣了解它发生的原因,而不是寻找修复。

的functions.php

function set_variables() {
    global $data;
    print_r($data);
}

included_file.php

set_variables();
(Code that sets other variables and works with HTML)

template_file.php

$data = "Test";
include "included_file.php";

上面代码的结果是什么 - 我无法在functions.php中获取函数来识别template_file.php中定义的变量。但是,如果我在functions.php中定义$ data变量,它就可以工作。

就像我说的那样,这让我感到困惑,因为它似乎与函数中声明全局变量的工作原理相矛盾。我怎么弄错了?

2 个答案:

答案 0 :(得分:0)

看起来你拼错了调用函数:

set_variable()与set_variables()

不同

请注意PHP中有关包含文件的内容:

  

当包含文件时,它包含的代码将继承发生包含的行的变量范围。从那时起,调用文件中该行可用的任何变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。

请参阅:http://php.net/manual/en/function.include.php

答案 1 :(得分:0)

@zerkms - 非常感谢您回答我的问题。事实证明,我所要做的就是将变量声明为定义它的文件中的全局变量。

因此,在上面给出的例子中,解决方案如下:

的functions.php

function set_variables() {
    global $data;
    print_r($data);
}

included_file.php

set_variables();
(Code that sets other variables and works with HTML)

template_file.php

global $data = "Test";
include "included_file.php";

我只是假设template_file.php中声明的变量在全局范围内,但我认为它不是。在这些问题上仍然有点模糊,但我知道代码有效,我对此非常满意。

相关问题