ホームページ  >  記事  >  バックエンド開発  >  関数の内部変数が外部参照され、実行後に自動的に削除されないのはなぜですか?

関数の内部変数が外部参照され、実行後に自動的に削除されないのはなぜですか?

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

関数 counter($d=0) {
$counter = 1+$d;
return function() use(&$counter) {return $counter ++;};

$a = counter( );
echo $a(); //1
echo $a(); 2 に等しい
関数内の変数はローカルです。パブリックに使用するにはどうすればよいですか?
echo $a(); //1

よくわかりません、答えてください。詳しくは、2時間勉強しましたが、まだ理解できません


----------




適当に書いたので、分析できたかどうかはわかりません。は正しいです、修正してアドバイスをお願いします




ディスカッションへの返信 (解決策)

何を使えばいいですか?
(&$counter) を使用するので、もちろんその結果を知る必要があります。その & により、ルールが変更されました

参照であるため、2 つ以上の変数が同じデータ領域を指します。 1 つを削除すると、もう 1 つはまだ残っています
js のクロージャーは非常に人気がありますが、php では非常に少ないようです...

匿名関数が $a に代入された後、それは a の誕生と同等ですグローバル関数ですが、これは重要ではありません...

使用中の $ counter が単なるコピー呼び出しの場合、 $a = $counter(); の代入後、メモリは解放されます

それはたまたまポインタです...そのため、メモリの一部はこの匿名関数に残ります
この時点で、匿名関数 $counter は $a にのみ属します。 $b = counter(); と設定すると、別の独立した $counter が存在します

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