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

Global variable isn't accessible inside my Wordpress function. Why not?

我在 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 变量,它就可以工作。

正如我所说,这让我感到困惑,因为它似乎与在函数内声明全局变量的方式相矛盾。我怎么弄错了?

您似乎拼错了调用函数:

set_variable() 与 set_variables()

不同

请注意 PHP 中关于包含文件的以下内容:

When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward. However, all functions and classes defined in the included file have the global scope.

参见: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 中声明的变量在全局范围内,但我想它不是。原因仍然有点模糊,但我知道代码有效,对此我真的很高兴。