全局变量不是';在我的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.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中声明的变量在全局范围内,但我认为它不是。为什么还有点模糊,但我知道代码有效,我真的很高兴。