Bagaimanakah Gelagat Tugasan Mempengaruhi Objek dalam PHP: Nilai vs. Rujukan?

Barbara Streisand
Lepaskan: 2024-10-22 07:25:30
asal
552 orang telah melayarinya

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

Memahami Penetapan Objek dalam PHP: Nilai vs. Rujukan

Apabila ia datang kepada penetapan objek dalam PHP, fahami perbezaan antara nilai dan rujukan tingkah laku adalah penting. PHP boleh menetapkan objek sama ada mengikut nilai atau rujukan.

Coretan Kod Asal

Pertimbangkan kod PHP berikut:

<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>
Salin selepas log masuk

Soalan: Kelakuan Tugasan

Apabila kaedah Bar::test() dilaksanakan dan menukar nilai foo # 5 dalam tatasusunan objek foo, adakah foo # 5 sebenar dalam tatasusunan akan terjejas , atau adakah pembolehubah $testFoo hanya pembolehubah tempatan yang tidak lagi wujud pada penghujung fungsi?

Jawapan: Tugasan melalui Rujukan

Untuk menentukan tingkah laku , mari kita analisa kod yang diberikan:

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

Melaksanakan kod ini menghasilkan output berikut:

Foo #5
My value has now changed
Salin selepas log masuk

Penjelasan

PHP memperuntukkan objek dengan rujukan secara lalai dalam versi 5. Ini bermakna apabila objek foo # 5 dikembalikan oleh getFoo(), rujukan kepada objek yang sama disimpan dalam pembolehubah $testFoo.

Oleh itu, apabila setValue() kaedah dipanggil pada $testFoo, objek foo # 5 sebenar dalam tatasusunan diubah suai, bukan hanya salinan tempatan. Inilah sebab mengapa nilai foo # 5 berubah walaupun selepas kaedah Bar::test() dilaksanakan.

Nota tentang Tugasan Mengikut Nilai

Jika mahu, anda boleh menetapkan objek mengikut nilai dan bukannya dengan rujukan menggunakan kata kunci klon:

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

Atas ialah kandungan terperinci Bagaimanakah Gelagat Tugasan Mempengaruhi Objek dalam PHP: Nilai vs. Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!