関数 &test(){
static $b = 1;
$b を返す }
$a = &test();
$c = & test(); / / ここで test() 関数が再度呼び出されるのですが、なぜ静的な $b = 1; が実行されなくなったのですか?結果はこの時点で $c=10 であることを示しているためです
// static が削除されると、結果は 3 になります。これをどう説明しますか?ありがとう!
echo $c;
ディスカッション (解決策) への返信
static は変数 $b を変更します。その後、static が削除されると、呼び出されるたびに初期化されます
。 a = &test(); (&が追加され、アドレスが渡されます) $a が変更されると、静的変数 $b の値も変更されるため、 $c = &test(); が実行されると、 $b は 8 で、10 が返されます
static は変数 $b を変更します。その後、static が削除されると、$a = &test() が呼び出されるたびに初期化されます。 ; (& を追加し、アドレスを渡します)、$a が変更され、静的変数 $b の値も変更されるため、$c = &test(); が実行されると、$b の値は 8 と 10 になります。
ステートメントを
function &test() {
static $b = 100;
static $b = 1000; // $b = 1000;
return $b;
} 再度テストしたところ、元の静的な状態は存在できないことがわかりました。静的に変更してください。でもエラーが報告されないのはちょっとたまりませんね(笑)。
静的変数には宣言時にのみ初期値が割り当てられます。静的変数はグローバル変数のプロパティを持ちますが、スコープは異なります。
静的変数は関数のスコープ内にのみ存在します。スタック。一般に、関数内の変数 (ローカル変数など) は関数の終了後に解放されますが、静的変数は解放されません。つまり、変数の値は、次回この関数が呼び出されたときにも保持されます。
静的変数には宣言時にのみ初期値が割り当てられますが、スコープは +1 異なります。