Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在我的Wordpress函数中无法访问全局变量。为什么不呢?_Php_Wordpress_Global Variables_Php Include - Fatal编程技术网

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

Php 在我的Wordpress函数中无法访问全局变量。为什么不呢?,php,wordpress,global-variables,php-include,Php,Wordpress,Global Variables,Php Include,我在wordpress工作,在functions.php中有一个函数。这意味着根据变量使用的上下文设置多个变量。但是有个问题 我在包含的模板文件中使用该函数,该函数用于处理包含模板文件的页面上的变量。我在函数中将所有变量声明为全局变量,但函数不识别变量的值。我不明白为什么会发生这种情况,因为我确信变量作用域的使用是正确的 为了消除混淆,我在下面提供了一个简化的代码示例,显示了此问题涉及的三个文件。如果有人知道为什么会这样,我会很高兴听到。我感兴趣的是理解它发生的原因,而不是寻找解决办法 func

我在wordpress工作,在functions.php中有一个函数。这意味着根据变量使用的上下文设置多个变量。但是有个问题

我在包含的模板文件中使用该函数,该函数用于处理包含模板文件的页面上的变量。我在函数中将所有变量声明为全局变量,但函数不识别变量的值。我不明白为什么会发生这种情况,因为我确信变量作用域的使用是正确的

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

functions.php

function set_variables() {
    global $data;
    print_r($data);
}
function set_variables() {
    global $data;
    print_r($data);
}
包含的\u file.php

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

$data = "Test";
include "included_file.php";
global $data = "Test";
include "included_file.php";
上面代码的结果是什么——我无法让functions.php中的函数识别template_file.php中定义的变量。但是,如果我在functions.php中定义$data变量,它就可以工作


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

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

set_变量与set_变量不同

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

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


请参阅:

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

因此,在上述示例中,解决方案如下:

functions.php

function set_variables() {
    global $data;
    print_r($data);
}
function set_variables() {
    global $data;
    print_r($data);
}
包含的\u file.php

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

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

我只是假设template_file.php中声明的变量在全局范围内,但我认为不是。为什么还有点模糊,但我知道代码起作用了,我真的很高兴。

嗯。。。set_变量和set_变量不是一回事,它真的是全局的吗?你怎么知道的?顺便说一句,为什么你需要一个全局变量?为什么不把它作为一个参数传递?@Machavity-这在创建示例时是一个错误代码本身很好,但是很冗长。我不想粘贴太多代码。@zerkms-我在函数中声明了变量global,在另一个文件中使用了该函数,然后将该文件包含在模板中。我假设模板文件中声明的变量相对于函数调用是全局的。很明显,我在某个地方犯了一个错误,我不知道它是什么。@user3628576如果一个变量是全局变量,它必须在使用它的任何地方声明为全局变量。或者必须将其置于全局范围内。简单的,是的。包含的文件强制执行了不正确的全局范围。您的编辑也不正确。请仔细阅读您引用的最后一句话。@Stenn_R-谢谢您的反馈,但这是我在创建示例时犯的错误。上面的代码是文件中发生的事情的简化版本。不是我真正的代码。我的问题是针对函数中声明为全局的变量不可用的现象。我只是试图给出代码执行的上下文的可视化表示,试图澄清这种情况。