この記事の内容は、グラフィックおよびテキスト解析における PHP オブジェクトの代入操作が「値による受け渡し」であるか、「アドレスによる受け渡し」であるのかについてです。必要な友達に共有します。参照できます
変数はデフォルトで常に値によって割り当てられることがわかっています。つまり、式の値が変数に代入される場合、元の式全体の値がターゲット変数に代入されます。これは、ある変数の値が別の変数に割り当てられている場合、一方の変数の値を変更しても、もう一方の変数には影響を与えないことを意味します。
簡単な例:
<?php $a = 'hello world'; $b = $a; $a = 'bey world'; var_dump($a); var_dump($b); ?>
このとき、$b = $a、メモリ内のストレージはおおよそ次のようになります:
しかし、オブジェクトがインスタンス化されると、オブジェクトは渡されるのではなく転送されます。 value には、オブジェクトのアドレスが渡されます。つまり、オブジェクト全体はコピーされません。これは、コピーすると時間がかかり、メモリを大量に消費するためです。
簡単な例も示します:
<br>
<?php class Person { public $name; public $age; } $a = new Person(); $b = $a; $c = &$a; $a->name = 'gavin'; $a = null; var_dump($b); var_dump($a); var_dump($c);
実行結果:
object(Person)#1 (2) { ["name"]=> string(5) "gavin" ["age"]=> NULL } NULL NULL
上記の例の変数の操作プロセスは、大まかに次のとおりです:
$b = $a; $c =& $a;
オブジェクトインスタンスを新しいオブジェクトに代入するとき変数、新しい変数 変数は同じインスタンスにアクセスします。
参照代入 (&) は、新しい変数が元の変数を参照すること、つまり、その「エイリアス」または「ポインター」になることを意味します。新しい変数を変更すると元の変数に影響し、その逆も同様です。
$a = null;
おそらく、直接代入ではオブジェクトがコピーされないので、どうすればオブジェクトをコピーできるのかと疑問に思うかもしれません。 PHP でオブジェクトのクローンを作成してコピーするには、clone 演算子を使用します。
$f = new Person(); $b = clone $f; //创建一个对象副本
関連する推奨事項:
以上がグラフィックとテキストの分析: PHP オブジェクトの代入操作は「値渡し」ですか、それとも「アドレス渡し」ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。