2012-01-17 65 views
0

我的主页包含天气为世界各地的三个城市作为显示的图像增加凝聚力饲料

index.php

在主页中,我宣布3个变量存储RSS网址每个城市

$newYorkWeatherSource = 'http://weather.yahooapis.com/forecastrss?p=USNY0996&u=f'; 
$londonWeatherSource = 'http://weather.yahooapis.com/forecastrss?p=UKXX0085&u=c'; 
$parisWeatherSource = 'http://weather.yahooapis.com/forecastrss?p=FRXX0076&u=c'; 

我拉相同的标签上面显示的三个网址,并从传递给它的变量使用3个相同的功能在一处。

下面显示传递给函数的变量。很明显,在$ weather可以返回之前使用其他函数。

function new_york_current_weather($newYorkWeatherSource) { 

// Get XML data from source 
if (isset($newYorkWeatherSource)) { 
    $feed = file_get_contents($newYorkWeatherSource); 
} else { 
    echo 'Feed not found. Check URL'; 
} 

checkWeatherFeedExists($feed); 
$xml = new SimpleXmlElement($feed); 

$weather = get_dateTime($xml); 
$weather = get_temperature_and_convert($xml); 
$weather = get_conditions($xml); 
$weather = get_icon($xml); 

return $weather; 
} 

正如我所提到的,I电流重复这个功能3倍只是替换是在上述实例中通过了$ newYorkWeatherSource变量。任何想法如何我可以重复使用这个功能3次,但通过不同的网址,以保持我的主页显示3个城市的天气?当然,如果每个城市都在个别页面上呈现,但其目的是将它们放在一起以便进行比较,则重用该功能很容易。

任何想法?

在此先感谢。

回答

2

正如我所提到的,我当前重复这个函数3次,只是替换上面例子中传递的$ newYorkWeatherSource变量。任何想法如何我可以重复使用这个功能3次,但通过不同的网址,以保持我的主页显示3个城市的天气?

也许我完全忽略了你的问题的重点,但你问如何重命名函数和变量?因为,如果是这样,它只是一个搜索的问题,并在功能上的前几行替换...

function get_current_weather($rss_url) { 
    // Get XML data from source 
    if (isset($rss_url)) { 
     $feed = file_get_contents($rss_url); 
    } else { 
     echo 'Feed not found. Check URL'; 
    } 
    // ... 

只需使用一个替代的特定城市的功能开始了这个样子,并称之为三次,每个特定城市的RSS提要URL一次。


从评论:

,但我只是想知道什么,我会用3 RSS URL变量做的,因为我不能代替他们都rss_url重命名为$,我也只是覆盖他们,直到最终唯一的URL将是巴黎

我相信你可能会受到PHP变量范围的误解。让我们这个片段为例:

function bark($dog) { 
    echo 'The dog says ', $dog, ".\n"; 
} 

$cat = 'meow'; 
bark($cat); 

该代码会发出The dog says meow.当调用bark函数的变量,PHP获取数据*的副本,并将其传递到函数作为变量名称在功能中指定。你不需要在内部和外部命名变量相同的东西。事实上,你不能**甚至看到一个函数外部定义的变量:

function i_see_you() { 
    echo 'The dog heard the cat say ', $cat, ".\n"; 
} 
$cat = 'meow'; 
i_see_you(); 

该代码会发出The dog heard the cat say .,如$cat超出范围在这里。

回到手边的问题,我们仍然有三个天气网址。

$newYorkWeatherSource = 'http://weather.yahooapis.com/forecastrss?p=USNY0996&u=f'; 
$londonWeatherSource = 'http://weather.yahooapis.com/forecastrss?p=UKXX0085&u=c'; 
$parisWeatherSource = 'http://weather.yahooapis.com/forecastrss?p=FRXX0076&u=c'; 

所有你需要的,以使事情的工作做的是:

echo get_current_weather($newYorkWeatherSource); 
echo get_current_weather($londonWeatherSource); 
echo get_current_weather($parisWeatherSource); 

在函数内部,适当的名称正确的变量将具有适当的数据,以及正确的事情会发生。

*:PHP使用了一种名为“copy-on-write”的功能,它可以做你认为它可能做的事。传递包含大量数据的变量是完全安全的。它不会消耗意外数量的内存。没有必要使用引用。其实,忘记我曾经提到任何关于参考的东西,你现在不需要它们。
**:可以通过使用global关键字查看全局范围内的变量。全局是不好的做法,并导致意大利面代码。您可能想了解有关variable scope in PHP的更多信息。

+0

是的,我想如何重命名函数和变量,但我只是想知道我将如何处理3个RSS URL变量,因为我无法替换全部重命名为$ rss_url,因为我只是覆盖它们,直到最终唯一的URL将成为巴黎,因为它是我的主页上设置的最后一个变量。 – newToJava

+1

我已经用可能对您有帮助的信息更新了我的答案。 – Charles

+0

非常有用,这样简单的修复。非常感谢。投了票。 – newToJava