Apabila Menukar Nilai Pembolehubah Objek, Bagaimanakah PHP Mengendalikan Penetapan Rujukan dan Nilai?

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

When Changing the Value of Object Variables, How Does PHP Handle Assignment of Reference and Value?

Tugasan dalam PHP: Melewati Nilai atau Rujukan

Objek dalam PHP dikendalikan secara berbeza daripada jenis data primitif apabila berkaitan dengan tugasan. Secara lalai, PHP memberikan pembolehubah melalui rujukan, bermakna mengubah nilai pembolehubah objek juga akan mempengaruhi objek asal. Tingkah laku ini boleh menjadi agak mengelirukan, terutamanya apabila bekerja dengan tatasusunan objek.

Penjelasan Kod

Pertimbangkan coretan kod berikut:

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

class Bar
{
    private array $foos;

    // ...

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

    public function test(): void
    {
        $testFoo = $this->getFoo(5);
        $testFoo->setValue("My value has now changed");
    }
}

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

Melalui Nilai dan Rujukan

Sekarang, mari analisa kod dan jawab soalan:

Apabila kaedah Bar::test() dijalankan dan ia mengubah nilai foo #5 dalam tatasusunan objek foo, adakah foo #5 sebenar dalam tatasusunan akan terjejas?

Apabila kaedah getFoo mengembalikan objek Foo pada indeks 5, ia mengembalikan salinan objek dengan lalai kerana PHP memberikan pembolehubah mengikut nilai untuk jenis data primitif dan salinan untuk jenis data rujukan secara lalai. Oleh itu, perubahan yang dibuat pada objek $testFoo tidak akan menjejaskan objek asal dalam tatasusunan sehingga ia ditugaskan kembali kepada tatasusunan.

Tugasan melalui Rujukan

Walau bagaimanapun , kod dalam ujian secara langsung mengubah suai objek Foo yang dikembalikan. Apabila tugasan kepada objek dibuat, PHP memberikan dengan rujukan. Ini bermakna perubahan yang dibuat pada objek yang ditetapkan akan ditunjukkan dalam objek asal. Akibatnya, selepas kaedah setValue dipanggil pada $testFoo, objek Foo asal pada indeks 5 dalam tatasusunan $foos dikemas kini.

Demonstrasi

Menjalankan kod akan menghasilkan output berikut:

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

Output ini menunjukkan bahawa tugasan melalui gelagat rujukan telah menjejaskan objek asal dalam tatasusunan.

Menukar Gelagat Tugasan

Jika anda ingin menetapkan objek mengikut nilai (membuat salinan) dan bukannya dengan rujukan, anda boleh menggunakan kata kunci 'klon', seperti yang ditunjukkan di bawah:

<code class="php">$testFoo = clone $this->getFoo(5);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Apabila Menukar Nilai Pembolehubah Objek, Bagaimanakah PHP Mengendalikan Penetapan Rujukan dan Nilai?. 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!