尝试在XML RSS feed中创建高内聚

时间:2011-12-15 19:59:18

标签: php xml rss

我正在尝试通过创建其他函数来提高代码的可读性,但拆分get_current_weather_data()函数会导致以下错误:

Fatal error: Call to a member function children() on a non-object in C:\xampp\htdocs\Twinz\src\weather.php on line 37

第37行必须是返回$ weather后的最后一个大括号;并且只有在为get_city()创建单独的函数后才会出现此错误。我可以轻松地将它移回去,但我想知道:

是否无法拆分此功能以及一般意见。我想做的事情毫无意义吗?

此功能正在引入Yahoo XML天气预报,我处理并输出我需要的数据;恰好是,城市,温度和现状。

<?php

function get_current_weather_data() {
// Get XML data from source
$feed = file_get_contents("http://weather.yahooapis.com/forecastrss?p=USNY0996&u=f");

// Check to ensure the feed exists
if (!$feed) {
    die('Weather not found! Check feed URL');
}

$xml = new SimpleXmlElement($feed);

get_city(); 

// Pull temperature 
$weather['temp'] = $xml->channel->item->children('yweather', TRUE)->condition->attributes()->temp;
echo $weather['temp'] . "<br />";

// Pull current conditions 
$weather['conditions'] = $xml->channel->item->children('yweather', TRUE)->condition->attributes()->text;
echo $weather['conditions'] . "<br />";

return $weather;
}

get_city()函数:

function get_city() {
// Pull city 
$weather['city'] = $xml->channel->children('yweather', TRUE)->location->attributes()->city;
echo $weather['city'] . "<br />";

}

1 个答案:

答案 0 :(得分:1)

这是一个简单的范围和代码设计问题,与SimpleXML或XML没什么关系。

您在$xml函数中使用了$weatherget_city(),但它无法访问任何变量$xml$weather,也无法获取任何方式那数据退了!

像这样重写:

function get_city(SimpleXMLElement $xml) {
    // use your $xml to get the city value
    return $city;
}
// and in your get_current_weather_data() function, use like so:

$weather = array();
$weather['city'] = get_city($xml);