ホームページ  >  記事  >  バックエンド開発  >  PHP でオブジェクトを割り当てる場合: 値と参照、参照変数に加えられた変更は元のオブジェクトに影響しますか?

PHP でオブジェクトを割り当てる場合: 値と参照、参照変数に加えられた変更は元のオブジェクトに影響しますか?

DDD
DDDオリジナル
2024-10-22 07:20:30866ブラウズ

When Assigning Objects in PHP: Value vs. Reference, Can Modifications Made to a Reference Variable Affect the Original Object?

PHP でのオブジェクトの割り当て: 値と参照

PHP では、オブジェクトの割り当て動作を理解することが重要です。値または参照による割り当ての概念は、コード内でオブジェクトがどのように処理および更新されるかを決定する上で重要な役割を果たします。これらの代入タイプの微妙な違いと、実際の例を通してその意味を詳しく見てみましょう。

次のコード スニペットを考えてみましょう。

<code class="php">class Foo
{
    // ...
}

class Bar
{
    // ...
    function test()
    {
        $testFoo = $this->getFoo(5);
        $testFoo->setValue("My value has now changed");
    }
}</code>

Bar::test() メソッドが呼び出されると、配列から Foo オブジェクトをフェッチし、その値を変更します。しかし、複雑な疑問が生じます: この変更は配列内の実際の Foo オブジェクトに影響を与えるのでしょうか、それとも単に一時変数に限定されているのでしょうか?

この謎を解明するために、コードを実行して出力を分析してみましょう:

<code class="php">$b = new Bar;
echo $b->getFoo(5)->value;
$b->test();
echo $b->getFoo(5)->value;</code>

結果は通常次のようになります。

Foo # 5
My value has now changed

この結果は、test() メソッドの変更が実際に配列内の実際の Foo オブジェクトに影響を及ぼし、その値の変更につながったことを示しています。ただし、これが「参照渡し」の結果ではないことを明確にすることが重要です。代わりに、これは、PHP 5 でのオブジェクトの割り当てを制御する「参照による割り当て」のデフォルトの動作に起因すると考えられます。

オブジェクトのコンテキストにおいて、参照による割り当てとは、オブジェクトが変数に割り当てられるときに、変数とオブジェクトはどちらも、基になる同じメモリ位置を指します。したがって、参照変数を通じて行われた変更は、元のオブジェクトに直接反映されます。

この動作を回避し、値による代入を実行するには、clone キーワードを利用できます。オブジェクトのクローンを作成すると、別個のメモリ アドレスを持つまったく新しいオブジェクトが作成され、クローンを通じて行われた後続の変更が元のオブジェクトに影響を与えないことが保証されます。

結論として、PHP のオブジェクトへの参照による代入メカニズムにより、次のことが可能になります。参照を介したオブジェクトの直接変更。この機能は便利であるか、または混乱を招く可能性があります。参照割り当てがどのように機能するかを理解することで、開発者は情報に基づいた意思決定を行い、コード内での予期せぬ結果を回避できるようになります。

以上がPHP でオブジェクトを割り当てる場合: 値と参照、参照変数に加えられた変更は元のオブジェクトに影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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