背景
どの言語でも、その実行モデルとメモリ モデルを理解することは意味があります。この記事の内容は正しくない可能性があります。批判してください。
実行モデル各リクエストは独立した PHP プロセスであり、2 つのリクエストは完全に分離され、静的変数やグローバル プロパティなどの他のメカニズムを介して複数のリクエスト間でデータを共有します。
例
1 <?php2 static $StaticVar = 1;3 $StaticVar++;4 5 echo $StaticVar.'<br/>';6 ?>
結果
2 //无论刷新多少次请求,结果都是2。
以下は PHP のメモリ管理ルールです:
デフォルトでは値で渡します。 参照渡しは明示的に宣言する必要があります。 オブジェクト タイプの値はオブジェクトのアドレスです。
1 $symbol = value;
ここで、symbol はシンボル テーブル (グローバル シンボル テーブルまたはアクティブ シンボル テーブル) に格納されているシンボル、value はシンボルによって参照される値です。
1 $symbol_ref = &$symbol;
その中で、symbol_ref とsymbol は同じ値を参照します。
最初の小さなテストコード
rreee
結果
rreee
メモリ変更
第1ステップ
第2ステップ
第3ステップ
ステップ 4
ステップ 5
ステップ6
2番目の小さなテストコード
1 <?php 2 $var_a = 1; 3 $var_b = $var_a; 4 $var_c = &$var_a; 5 $var_d = $var_c; 6 $var_e = &$var_c; 7 $var_e = 2; 8 9 echo "var_a:$var_a, var_b:$var_b, var_c:$var_c, var_d:$var_d, var_e:$var_e<br/>"10 11 ?>
結果
1 var_a:2, var_b:1, var_c:2, var_d:1, var_e:2
メモリ変更
ステップ1
ステップ2
ステップ 3
ステップ 4
注意実際の PHP メモリは上記とは異なりますが、セマンティクスはメモリを最適化するために上記で説明したものと変わりません。
メモリ使用効率を向上させるために、PHP はシンボルに割り当てるときに値ごとにすぐにコピーするのではなく、参照カウント (参照されるシンボルの数) を維持し、特定の適切な時点で自動的にコピーされます。瞬間は開発者にとって透過的であり、考慮する必要はありません。
ご興味のある方はこちらの記事をご覧ください: http://www.laruence.com/2008/09/19/520.html