Apabila Menetapkan Objek dalam PHP: Nilai vs. Rujukan, Bolehkah Pengubahsuaian yang Dibuat pada Pembolehubah Rujukan Mempengaruhi Objek Asal?

DDD
Lepaskan: 2024-10-22 07:20:30
asal
788 orang telah melayarinya

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

Menetapkan Objek dalam PHP: Nilai vs. Rujukan

Dalam PHP, memahami gelagat penetapan objek adalah penting. Konsep pemberian mengikut nilai atau rujukan memainkan peranan penting dalam menentukan cara objek dikendalikan dan dikemas kini dalam kod. Mari kita mendalami nuansa jenis tugasan ini dan implikasinya melalui contoh praktikal.

Pertimbangkan coretan kod ini:

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

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

Apabila kaedah Bar::test() digunakan, ia mengambil objek Foo daripada tatasusunan dan mengubah suai nilainya. Walau bagaimanapun, persoalan yang membingungkan timbul: adakah perubahan ini menjejaskan objek Foo sebenar dalam tatasusunan atau ia hanya terhad kepada pembolehubah sementara?

Untuk merungkai misteri ini, mari jalankan kod dan analisis output:

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

Hasilnya biasanya akan menunjukkan:

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

Hasil ini menunjukkan bahawa pengubahsuaian kaedah test() sememangnya memberi kesan kepada objek Foo sebenar dalam tatasusunan, yang membawa kepada perubahan dalam nilainya. Walau bagaimanapun, adalah penting untuk menjelaskan bahawa ini bukan akibat daripada "melalui rujukan." Sebaliknya, ia dikaitkan dengan gelagat lalai "tugasan melalui rujukan", yang mengawal penetapan objek dalam PHP 5.

Dalam konteks objek, penetapan melalui rujukan bermaksud bahawa apabila objek ditugaskan kepada pembolehubah, kedua-dua pembolehubah dan objek menghala ke lokasi memori asas yang sama. Oleh itu, sebarang perubahan yang dibuat melalui pembolehubah rujukan mencerminkan secara langsung pada objek asal.

Untuk mengelakkan tingkah laku ini dan melaksanakan tugasan mengikut nilai, kata kunci klon boleh dimanfaatkan. Dengan mengklon objek, objek baharu sepenuhnya dicipta dengan alamat memori yang berbeza, memastikan bahawa sebarang pengubahsuaian seterusnya yang dibuat melalui klon tidak menjejaskan objek asal.

Kesimpulannya, penetapan PHP melalui mekanisme rujukan dengan objek membenarkan pengubahsuaian langsung objek melalui rujukan, ciri yang boleh menjadi sama ada mudah atau mungkin mengelirukan. Memahami cara tugasan rujukan berfungsi memperkasakan pembangun untuk membuat keputusan termaklum dan mengelakkan akibat yang tidak diingini dalam kod mereka.

Atas ialah kandungan terperinci Apabila Menetapkan Objek dalam PHP: Nilai vs. Rujukan, Bolehkah Pengubahsuaian yang Dibuat pada Pembolehubah Rujukan Mempengaruhi Objek Asal?. 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
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!