0

本体関数と、最初の関数内で呼び出される関数があります。

以下に示すように、2 番目の関数で使用している間はパラメーター名を変更しません。

_display_bar(); 内で使用するためにパラメーター名を変更する必要がありますか? そうしないとどんな副作用がありますか?

    function main_func($form, &$form_state, $key, $code) {
    $output = '';
    ...
    $output .= _display_navbar($trans, $status_names);

    return $output
    }

    function _display_navbar($trans, $status_names) {
     $trans = 'bla';
     $status_names = 'another bla';
   $bar = $trans . ':' .$status_names;
     return $bar;
    };
4

4 に答える 4

2

変数には関数スコープがあります。特に宣言しない限り、名前は関数内でのみ有効です。それらは他のスコープにブリードしません。副作用はありません。一意の名前を使用する必要はありません。

于 2013-02-05T11:35:38.063 に答える
1

それは実際には問題ではありません。ただし、同じ名前を使用しない方がよいでしょう。混乱を招きます。例を挙げましょう。$ sは、sumへの最初の関数呼び出しの後に3になります。7合計への2番目の関数呼び出しの後。パラメーターの名前が関数パラメーター名と同じではありませんでした。

あなたの質問に完全に答えるために-副作用は絶対にありません。

function main()
{
    $a = 1;
    $b = 2;
    $s = sum($a, $b);

    $d = 3;
    $e = 4;
    $s = sum($d, $e);
}

function sum($first, $second) 
{
    $ret = $first + $second;
    return $ret;
}
于 2013-02-05T11:41:03.327 に答える
1

変数が関数に渡されると、変数の名前は重要ではなくなります。データのみが通過します。したがって、関数は次のようになります。

function _display_navbar($foo, $bar) {
   $foo = 'bla';
   return $bar;
}

そして、変数名に関係なく、2 番目のパラメーターとして渡されたものを返します。

于 2013-02-05T11:35:41.440 に答える
1

関数の引数として渡す名前は、呼び出された時点でスコープ内にある必要があります。

それらが正式な関数パラメーターと同じ名前を持っているかどうかは問題ではありませんが、同じ名前を持っているからといって、それらがスコープに入るわけではないことを認識しておく必要があります。

だから、あなたのコードで:

function main_func($form, &$form_state, $key, $code) {
    $output = '';
    ...
    $output .= _display_navbar($trans, $status_names);

とがその時点でスコープ内にない限り 、最後の行は正しくありません。$trans$status_names

于 2013-02-05T11:36:25.580 に答える