1

ここに私が持っているものがあります:

関数を含むファイル内:

global $numTrax;

次に、プレーヤーのhtmlであるhtmlページ内の関数を呼び出しますが、その時点で、再生するトラックの数を入れたいと思います:

audioPlayer(5);

そして関数は

function audioPlayer($numTrax)
{
    echo ' ... all html ...';

    // if i echo $numtrax here it shows 5
    // because function i used was audioPlayer(5)
    // so, i'm reassigning it using $numTrax = $numTrax
    // then next function: audioPlaylist($user_id,$username,$numTrax); has $numTrax
    // but the problem is it's not showing it there

    $numTrax = $numTrax;
    return $numTrax;
}

次に、ページのさらに下に、トラック リストを作成する別の関数があり、次のように呼び出されます。

audioPlaylist($user_id,$username,$numTrax);

問題はそれ$numTraxが実行されていないことです

質問変数$numTraxを関数内で移動させることはできますか?

4

6 に答える 6

2

上で述べたように、決して使用しないでglobalください。変数を処理するのはまったく間違った方法です。

次のようなものが必要だと思います:

$numTrax = audioPlayer(5);

audioPlayList($user_id, $username, $numTrax);
于 2013-05-20T12:17:23.593 に答える
0

関数を次のように変更します。

function audioPlayer($newNumTrax)
{
    global $numTrax;

    echo ' ... all html ...';

    $numTrax = $newNumTrax;
}

関数内でグローバル変数にアクセスまたは再割り当てするには、globalキーワードを使用してスコープに入れる必要があります。関数の引数は、混乱しないように、グローバル変数とは異なる名前にする必要があります。次に、引数変数の値をグローバル変数に代入するだけです。

どのように呼び出したかを見ると、この関数は何も返す必要はありません。グローバル変数の値を設定するだけです。

呼び出しの場合、引数としてaudioPlaylist渡す理由はありません。$numTraxこれはグローバル変数なので、すべての関数がアクセスできます。次のように関数を定義します。

function audioPlaylist($user_id, $username)
{
    global $numTrax;     #now you can use the global variable in this function

    #rest of function here
}

...そして次のように呼び出します:

audioPlaylist($user_id, $username);

globalを使用することは、プログラムを設計する上であまり良い戦略ではないことに注意してください。グローバルに頼るのではなく、変数を関数に渡すことをお勧めします。関数が扱いにくすぎる場合は、小さな関数に分割します。

于 2013-05-20T12:09:53.467 に答える
0

私の推測が間違っていなければ、キーワードの使い方が間違っていると思いますglobal

割り当て$numTrax = $numTrax;_

function audioPlayer($numTrax)
{
    $numTrax = $numTrax;
    return $numTrax;
}

実際には、ローカル変数の値$numTraxそれ自体に割り当てています。

グローバル変数を次のように定義する必要があります。

$numTrax = null ;

そして、あなたの関数では、パラメーターの名前を変更するグローバルなものをシャドウイングすることを避け、グローバル変数を宣言する必要があります(したがって、新しいローカル変数は作成されません)。次に例を示します。

function audioPlayer($paramNumTrax)
{
    global $numTrax; // declare it exist a global var somewhere called $numTrax

    $numTrax = $paramNumTrax; // Asign the local value to the global variable
    return $paramNumTrax;
}

詳細: http://php.net/manual/en/language.variables.scope.php

(場合によっては、「関数外でグローバルキーワードを使用してもエラーではありません。ファイルが関数内からインクルードされている場合に使用できます。」ということが発生する可能性があります。これがあなたの場合かどうかはわかりません)

お役に立てれば。

于 2013-05-20T12:17:49.603 に答える
0

PHP では、変数はデフォルトではグローバルではありません。それらを使用するすべての関数でそのように宣言するか、$GLOBALS['numTrax']代わりに設定する必要があります。

とはいえ、いくつかの理由から、グローバル変数に依存することは一般的に非常に悪い考えであると考えられています。ほとんどの場合、「遠く離れた場所でのアクション」、またはインターフェイスへのコーディングよりも変更が 10 倍難しくなっている実装の詳細に依存しています。(一般的な禁止事項は少し広すぎますが、使用されるケースの95% *ではグローバルは必要ありません。)

* (統計を持っていないので、完全にでっち上げの数字です。しかし、それが高すぎることを知っておいてください。:P)

于 2013-05-20T12:21:11.367 に答える
0

次のような関数で変数を定義する必要があります

global $numTrax;

グローバル変数を使用します。それ以外の場合は、ローカル スコープで新しい変数が作成されます。

于 2013-05-20T12:08:36.220 に答える