0

私のホームページには、画像に表示されているように、世界中の3つの都市の天気が含まれています

index.php

ホームページで、各都市のRSSURLを格納する3つの変数を宣言します

$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つの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回再利用しても、ホームページに3つの都市の天気を表示し続けるために、別のURLを渡す方法はありますか?もちろん、各都市が個別のページに表示されていれば、機能を再利用するのは簡単ですが、目的は、比較のためにそれらをまとめることです。

何か案は?

前もって感謝します。

4

1 に答える 1

2

前述したように、現在、上記の例で渡された $newYorkWeatherSource 変数を置き換えるだけで、この関数を 3 回繰り返しています。この関数を 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';
    }
    // ...

単純に、都市固有の関数をこのような関数に置き換えて、特定の都市の RSS フィード URL ごとに 1 回ずつ、合計 3 回呼び出します。


コメントから:

しかし、最終的に唯一の URL がパリになるまでそれらを上書きするだけなので、それらすべての名前を $rss_url に置き換えることはできないため、3 つの RSS 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

目前の問題に戻ると、まだ 3 つの天気 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 の変数スコープについてもっと読みたいと思うかもしれません。

于 2012-01-17T19:46:21.630 に答える