ホームページ >バックエンド開発 >PHPチュートリアル >代入動作は PHP のオブジェクトにどのような影響を及ぼしますか: 値と参照?

代入動作は PHP のオブジェクトにどのような影響を及ぼしますか: 値と参照?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-22 07:25:30636ブラウズ

How Does Assignment Behavior Affect Objects in PHP: Value vs. Reference?

PHP でのオブジェクトの割り当てを理解する: 値と参照

PHP でのオブジェクトの割り当てに関しては、値と参照の違いを理解する行動が重要です。 PHP では、値または参照によってオブジェクトを割り当てることができます。

元のコード スニペット

次の PHP コードを考えてみましょう:

<code class="php">class Foo {
    var $value;

    function foo($value) {
        $this->setValue($value);
    }

    function setValue($value) {
        $this->value = $value;
    }
}

class Bar {
    var $foos = array();

    function Bar() {
        for ($x = 1; $x <= 10; $x++) {
            $this->foos[$x] = new Foo("Foo # $x");
        }
    }

    function getFoo($index) {
        return $this->foos[$index];
    }

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

質問: 代入動作

Bar::test() メソッドが実行され、foo オブジェクトの配列内の foo # 5 の値が変更されると、配列内の実際の foo # 5 は影響を受けますか? 、それとも、$testFoo 変数は、関数の終了時に存在しなくなる単なるローカル変数になりますか?

答え: 参照による代入

動作を決定するには指定されたコードを分析してみましょう:

<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

説明

PHP は次の方法でオブジェクトを割り当てます。バージョン 5 ではデフォルトで参照されます。これは、foo # 5 オブジェクトが getFoo() によって返されるとき、同じオブジェクトへの参照が $testFoo 変数に格納されることを意味します。

したがって、setValue() $testFoo でメソッドが呼び出されると、単なるローカル コピーではなく、配列内の実際の foo # 5 オブジェクトが変更されます。これが、Bar::test() メソッドの実行後でも foo # 5 の値が変化する理由です。

値による代入に関する注意

必要に応じて、 clone キーワードを使用すると、参照ではなく値でオブジェクトを割り当てることができます:

<code class="php">$testFoo = clone $this->getFoo(5);
$testFoo->setValue("My value has now changed");</code>

以上が代入動作は PHP のオブジェクトにどのような影響を及ぼしますか: 値と参照?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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