ホームページ > バックエンド開発 > PHPチュートリアル > PHP: 実行モデルとメモリモデル

PHP: 実行モデルとメモリモデル

WBOY
リリース: 2016-06-23 14:37:52
オリジナル
985 人が閲覧しました

背景

どの言語でも、その実行モデルとメモリ モデルを理解することは意味があります。この記事の内容は正しくない可能性があります。批判してください。

実行モデル

各リクエストは独立した 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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート