ホームページ  >  記事  >  バックエンド開発  >  PHP関数参照呼び出しの問題

PHP関数参照呼び出しの問題

WBOY
WBOYオリジナル
2016-06-23 13:47:35997ブラウズ

関数 &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 異なります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。