1

現在、私は次のコードを持っています

私の「function.php」の中には

function calcTime($database_name,$currentTime){

    global $startTime;
    global $endTime;

    ...calcutions

    return $startTime;
    return $endTime;
}//end calcTime()

私のメインの「index.php」の中に

include('/function.php');

$databaseName = foo;

$currentTime = 12.30;

function begin($database_name,$currentTime){

    ...some calculations

    calcTime($database_name,$currentTime); //calling the function from other file

echo $startTime;

echo $endTime;

}// end begin()

私が抱えている問題は、内部関数内で宣言された変数が外部関数に渡されないことです。変数globalsを宣言し、それらを返しました。何が起こっているのかわからない。

calcTime($ database_name、$ currentTime);をエコーすると、興味深いことがあります。$ startTimeは返されますが、$endTimeは返されません。

助けてください。このように使いたい機能が他にもあります。ありがとうございました!!

4

3 に答える 3

2

PHPのglobalキーワードは、関数の外部で宣言されたグローバル変数にアクセスするために使用されます。書くためのシンタックスシュガーです$var =& $GLOBALS['var']

関数から2つの変数を返す方法には、少なくとも2つのオプションがあります。call-by-refまたは配列を返すことです。

function calcTime($database_name,$currentTime){
    return array('start' => $startTime, 'end' =>  $endTime);
}

$times = calcTime(…, …);
echo $times['start'], ' and ', $times['end'];
// or:
list($start, $end) = calcTime(…, …);
echo $start, ' and ', $end;

または、引数を参照として渡します。

function calcTime($database_name,$currentTime, &$startTime, &$endTime){
    $startTime = …;
    $endTime = …;
}

$startTime = 0;
$endTime = 0;
calcTime(…, …, $startTime, $endTime);
echo $startTime, ' and ', $endTime;
于 2012-07-14T19:20:58.213 に答える
2

簡単に言えば、呼び出し元のスコープもスコープではありませんglobal...したがって、それが機能するには、変数もそこで宣言する必要がありglobalます。グローバルの(過剰な)使用は悪い習慣と見なされ、仲間のコーダー(またはしばらく経った後でも)のためにデバッグするのは地獄であることに注意してください。パラメータとリターンを優先します。

**関数スコープでのみ表示される1つの関数にグローバル変数または変数を設定すると、すべての関数がphpで分離されることに注意してください

もちろん、返すことができる値は1つだけですが、次のように、より複雑な値になる場合もあります。

return array('startTime' => $startTime,'endTime' => $endTime);
于 2012-07-14T19:13:46.397 に答える
2

最初の問題はglobal、PHPでは少し直感に反することです。私はそれが私を混乱させたことを知っています。関数内の変数を外部からアクセスできるようにすることはありません。むしろ、外部で宣言された関数で変数を使用できます。例:

$foo = 'hello';
function bar() {
    global $foo;
    echo $foo;
}

やりたいことは、両方の変数を返すことです。ただし、できるのはreturn1回だけです。PHPがreturnステートメントに到達するとすぐに関数が終了するため、2番目のステートメントは実行されません。

私がアドバイスするのは、両方の値を含む配列を返すことです。例:

return array('startTime' => $startTime, 'endTime' => $endTime);

次に、extractそれらを再び変数にするために使用できます。

extract( calcTime() );
echo $startTime;
echo $endTime;
于 2012-07-14T19:17:35.377 に答える