跨文件重用函数中的PHP变量
我有一个Wordpress网站,我正在查看3个相关文件:跨文件重用函数中的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” 当我只想复
- 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'];