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

时间:2016-12-20 23:50:22

标签: php wordpress function include

[编辑:对早先措辞较差的问题道歉。总重写。]

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

  • 的functions.php
  • 的header.php
  • index.php(包括header.php)

我正在使用functions.php中的函数从外部Feed中提取天气数据,然后尝试在两个位置显示该数据 - 一次在header.php中(在网站的每个页面上),一次在index.php中(仅在主页上显示的第二个实例)。我可以显示第一个实例,但我遇到了第二个实例的问题

在functions.php中:

function arctic_valley_weather() {
    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]);

     return array(
      'dateTime' => $dateTime,
      'airTemp' => $weatherValues[1],
      'relHumid' => $weatherValues[2],
      'windSpeed' => $weatherValues[3],
      'windDirection' => $weatherValues[4],
      'windGust' => $weatherValues[5],
    );  
}

好的,然后在header.php中:

$weatherData = arctic_valley_weather();
echo round($weatherData['airTemp']);

这准确地显示了温度(圆形)。我们说“18”。真棒。

当我想复制完全相同的结果时,麻烦来自index.php:

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

这个错误地显示“0”,即使初始实例正确显示18。

我认为这是所有相关数据。什么跳出来?

3 个答案:

答案 0 :(得分:1)

尝试这样的事情,
首先在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.phpindex.php尝试访问$weatherData,如下所示:

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

希望这有帮助!

答案 1 :(得分:1)

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

请参阅此类似帖子:setting variable in header.php but not seen in footer.php

所以你必须在你的header.php文件中做这样的事情:

$GLOBALS['weatherData'] = arctic_valley_weather(); 
echo $GLOBALS['weatherData'];

index.php文件中,您可以这样做:

echo $GLOBALS['weatherData'];

答案 2 :(得分:0)

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

$variable = 'level 0';

function test_1() {
  $variable = 'level 1';
  echo $variable;
}

echo $variable; // will work, because $variable is set to 'level 0'.

test_1(); // will work, because $variable is set to 'level 1' ON THE FUNCTION

function test_2() {
  echo $variable;
}

echo test_2(); // Does not work, because $variable is not set INTERNALLY ON the function

当然,可以使用全局变量......但是你想要这样做,重构你的逻辑和你的代码来排除这个方法:)