我在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变量,它就可以工作。
就像我说的那样,这让我感到困惑,因为它似乎与函数中声明全局变量的工作原理相矛盾。我怎么弄错了?
答案 0 :(得分:0)
看起来你拼错了调用函数:
set_variable()与set_variables()
不同请注意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中声明的变量在全局范围内,但我认为它不是。在这些问题上仍然有点模糊,但我知道代码有效,我对此非常满意。