跨文件重用函数中的PHP变量

跨文件重用函数中的PHP变量,php,wordpress,function,include,Php,Wordpress,Function,Include,我有一个Wordpress网站,我正在查看3个相关文件: functions.php header.php index.php(包括header.php) 我使用functions.php中的函数从外部提要中提取天气数据,然后尝试在两个位置显示该数据—一个在header.php(在站点的每个页面上)中,一个在index.php(仅在主页上显示的第二个实例)。我可以显示第一个实例,但第二个实例有问题 functions.php 页眉 这准确地显示了温度(四舍五入)。让我们说“18” 当我只想复

我有一个Wordpress网站,我正在查看3个相关文件:

  • functions.php
  • header.php
  • index.php(包括header.php)
我使用
functions.php
中的函数从外部提要中提取天气数据,然后尝试在两个位置显示该数据—一个在
header.php
(在站点的每个页面上)中,一个在
index.php
(仅在主页上显示的第二个实例)。我可以显示第一个实例,但第二个实例有问题

functions.php 页眉 这准确地显示了温度(四舍五入)。让我们说“18”

当我只想复制完全相同的结果时,
index.php
中出现了问题:

echo round($weatherData['airTemp']);
这一个错误地显示“0”,即使初始实例正确地显示了18


原因可能是什么?

首先,使用全局变量。。。这不是变量的标准用法(或者您应该确切知道自己在做什么!)


当然,可以使用全局变量。。。但是如果您想这样做,重构您的逻辑和代码以排除此方法:)

尝试类似的方法,
首先在
function.php
文件中声明一个全局变量,然后像这样从方法中为其赋值

global $weatherData;

function arctic_valley_weather() {
    global $weatherData;

    function get_string_between($string, $start, $end) {
        //here's a function that just parses the data. not important
    }

    $fullstring = file_get_contents('http://www.cnfaic.org/library/grabbers/nws_feed.php');
    $parsed = get_string_between($fullstring, 'arctic_valley,', 'marmot,');
    $weatherValues = explode(",", $parsed);
    $dateTime = date_create($weatherValues[0]);

    $weatherData = array(
        'dateTime' => $dateTime,
        'airTemp' => $weatherValues[1],
        'relHumid' => $weatherValues[2],
        'windSpeed' => $weatherValues[3],
        'windDirection' => $weatherValues[4],
        'windGust' => $weatherValues[5],
    );
}
header.php
index.php
中,尝试访问
$weatherData
如下:

global $weatherData;
echo round($weatherData['airTemp']);

希望这有帮助

看起来Wordpress在函数体中包含了
header.php
。这意味着离开
header.php
后,在
header.php
中定义的所有变量都超出范围。无法访问
index.php
footer.php
page.php
等中的变量。一种解决方案是再次调用函数。但这会对您的外部资源提出另一个请求,这可能是一种浪费。或者,您可以将其分配给超全局
$GLOBALS
数组

见类似帖子:


因此,您必须在
header.php
文件中执行以下操作:

$GLOBALS['weatherData'] = arctic_valley_weather(); 
echo $GLOBALS['weatherData'];
index.php
文件中,您可以执行以下操作:

echo $GLOBALS['weatherData'];

请尝试创建一个或一段代码来准确地演示您遇到的问题。尽量减少你的代码,并将其与你的网站结构(什么文件包含什么内容)一起发布。就目前情况而言,没有人能说出什么是错的。可能有很多事情。我可以说的一件事是,你的函数根本不应该工作,除非你删除了它的某些部分<代码>$weatherValues未在任何位置定义,如果在函数外部定义,函数将无法使用它。您必须使用
global
关键字才能使用它。如果它们是全局的,那么在第二次函数调用之前,可能有什么东西正在修改它。谢谢-你说得对。这不是很好。我把问题改写得更清楚了。(还有更多的功能等)。我不确定我是否还漏掉了什么,但我不这么认为。看起来Wordpress在函数体中包含了
header.php
。这意味着离开
header.php
后,在
header.php
中定义的所有变量都超出范围。无法访问
index.php
footer.php
page.php
等中的变量。一种解决方案是再次调用函数。但这会对您的外部资源提出另一个请求,而且似乎是浪费。或者,您可以将其分配给超全局
$GLOBALS
数组。请看这个问题,它有一个类似的问题:因此您必须执行类似于
$GLOBALS['weatherData']=arctic_valley_weather()的操作
然后当您想要显示它时,您可以在
header.php
文件和
index.php
文件中执行
echo$GLOBALS['weatherData']
global $weatherData;
echo round($weatherData['airTemp']);
$GLOBALS['weatherData'] = arctic_valley_weather(); 
echo $GLOBALS['weatherData'];
echo $GLOBALS['weatherData'];