Повышение согласованности путем повторного использования функции PHP для нескольких RSS-каналов - PullRequest
0 голосов
/ 17 января 2012

Моя домашняя страница содержит погоду для трех городов по всему миру, как показано на изображении

index.php

На главной странице я объявляю 3 переменные, хранящие URL-адрес 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';

Я вытаскиваю идентичные теги из трех URL-адресов, показанных выше, и использую 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;
}

Как я уже говорил, я повторяю эту функцию 3 раза, просто заменив переменную $ newYorkWeatherSource, которая передается в приведенном выше примере.Любые идеи, как я мог бы использовать эту функцию 3 раза, но все же передать в другой URL, чтобы моя страница показывала погоду из 3 городов?Конечно, эту функцию легко использовать, если каждый город представлен на отдельных страницах, но цель состоит в том, чтобы объединить их для сравнения.

Есть идеи?

Заранее спасибо.

1 Ответ

2 голосов
/ 17 января 2012

Как я уже говорил, я повторяю эту функцию 3 раза, просто заменив переменную $ newYorkWeatherSource, которая передается в приведенном выше примере. Любые идеи, как я мог бы использовать эту функцию 3 раза, но все же передать в другой URL, чтобы моя страница показывала погоду из 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';
    }
    // ...

Просто замените функции, относящиеся к конкретному городу, одной из таких функций, начинающихся с этого, и вызывайте их три раза, по одному разу для каждого URL-адреса RSS-канала каждого конкретного города.


Из комментариев:

но мне просто интересно, что я буду делать с 3-мя переменными URL-адреса RSS, потому что я не могу заменить их все переименованными в $ 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 здесь выходит за рамки.

Возвращаясь к проблеме, у нас еще есть три погодных URL.

$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 использует что-то, называемое «копирование при записи», что делает то, что, как вы думаете, может сделать. Совершенно безопасно передавать переменные, содержащие большие данные. Это не будет потреблять неожиданные объемы памяти. Там нет необходимости использовать ссылки. На самом деле, забудьте, что я когда-либо говорил о ссылках, они вам сейчас не нужны.
**: Можно увидеть переменные из глобальной области видимости, используя ключевое слово global. Глобалы - плохая практика и приводят к спагетти-коду. Возможно, вы захотите узнать больше о области видимости переменных в PHP .

...