我在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.hp中定义$data变量,它就可以工作了。
正如我所说,这让我很困惑,因为它似乎与函数中声明全局变量的工作方式相矛盾。我怎么搞错了?
看起来您拼错了调用函数:
set_variable()与set_variables()不同
请注意以下来自PHP的关于包含文件的信息:
当包含一个文件时,它所包含的代码将继承发生包含的行的变量范围。从那时起,调用文件中该行可用的任何变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局作用域。
请参阅:http://php.net/manual/en/function.include.php
@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中声明的变量在全局范围内,但我认为它不是。为什么还有点模糊,但我知道代码有效,我真的很高兴。