ホームページ  >  記事  >  バックエンド開発  >  グラフィックとテキストの分析: PHP オブジェクトの代入操作は「値渡し」ですか、それとも「アドレス渡し」ですか?

グラフィックとテキストの分析: PHP オブジェクトの代入操作は「値渡し」ですか、それとも「アドレス渡し」ですか?

不言
不言オリジナル
2018-04-20 11:48:511690ブラウズ

この記事の内容は、グラフィックおよびテキスト解析における PHP オブジェクトの代入操作が「値による受け渡し」であるか、「アドレスによる受け渡し」であるのかについてです。必要な友達に共有します。参照できます


変数はデフォルトで常に値によって割り当てられることがわかっています。つまり、式の値が変数に代入される場合、元の式全体の値がターゲット変数に代入されます。これは、ある変数の値が別の変数に割り当てられている場合、一方の変数の値を変更しても、もう一方の変数には影響を与えないことを意味します。

簡単な例:

<?php 



$a = &#39;hello world&#39;;



$b = $a;



$a = &#39;bey world&#39;;







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 = &#39;gavin&#39;;
$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 の clone 演算子を使用してオブジェクトをコピーできます。私の能力には限界がありますので、この記事に「バグ」を見つけた場合は、お気軽にアドバイスをお願いします。また、他にご質問やご意見がございましたら、ぜひ共有してお知らせください。私たちは一緒に学び、一緒にコミュニケーションし、一緒に進歩します。

関連する推奨事項:

PHP オブジェクトの複製を実装する方法


以上がグラフィックとテキストの分析: PHP オブジェクトの代入操作は「値渡し」ですか、それとも「アドレス渡し」ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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