ApplePearPerson:
PHP Iにおけるグローバルおよびリファレンスで遊んでいるときに問題に出くわしました。私は、関数内で別の変数の参照に変数を設定したかったです。驚いたことに、グローバル変数は、関数呼び出しの後にその参照を失いました。
以下のコードでは、関数内であることがわかります$a
値を取得します5
が、その後、それは(その古い値のバックを持っています1
)。$x
一方、関数内で割り当てられた値を維持しています。
<?php
$a = 1;
$x = 2;
function test() {
global $a;
global $x;
$a = &$x;
$x = 5;
echo PHP_EOL;
echo $a . PHP_EOL;
echo $x . PHP_EOL;
}
test();
echo PHP_EOL;
echo $a . PHP_EOL; // $a is 1 here instead of 5
echo $x . PHP_EOL;
$a = &$x;
echo PHP_EOL;
echo $a . PHP_EOL;
echo $x . PHP_EOL;
出力:
5
5
1
5
5
5
なぜない$a
機能が行われた後、その参照を失いますか?
0stone0:
@Banzayが気づいたように、私は信じている$a = &$x;
だけでは、関数スコープの変数を変更します。あなたは使うべき$GLOBALS
機能の値を変更します。
function test() {
global $a;
global $x;
$GLOBALS['a'] = &$x;
$x = 5;
echo PHP_EOL;
echo $a . PHP_EOL;
echo $x . PHP_EOL;
}
1
5
5
5
5
5