Adakah __get dan __set Benar-benar Hanya Melebihkan Getter dan Setters dalam PHP?

Barbara Streisand
Lepaskan: 2024-11-12 14:34:02
asal
749 orang telah melayarinya

Are __get and __set Really Just Overloading Getters and Setters in PHP?

Kaedah Ajaib: Mendedahkan Tujuan Sebenar __get dan __set dalam PHP

Kaedah ajaib __get dan __set dalam PHP telah menarik minat pembangun, meninggalkan mereka tertanya-tanya tentang fungsi yang dimaksudkan. Sehingga baru-baru ini, adalah dipercayai bahawa kaedah ini membenarkan pemuatan berlebihan yang mudah bagi getter dan setter. Walau bagaimanapun, realiti memberi gambaran yang berbeza.

Memahami Peranan Sebenar Kaedah Sihir

Bertentangan dengan andaian popular, __get dan __set direka terutamanya untuk mengendalikan situasi di mana kaedah langsung atau akses harta adalah terhad disebabkan oleh had kebolehaksesan. Khususnya:

  • __set digunakan apabila cuba menulis pada harta yang tidak boleh diakses.
  • __get digunakan apabila membaca data daripada harta yang tidak boleh diakses.

Contoh

Pertimbangkan kod berikut coretan:

class foo {
    public $bar;
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;
    }
}

$foo = new foo();
echo $foo->bar; // Fails
$foo->bar = 'test'; // Fails
Salin selepas log masuk

Dalam kes ini, kaedah __get dan __set tidak digunakan kerana sifat $bar boleh diakses secara umum. Manual PHP dengan jelas menyatakan: "Kaedah ajaib bukan pengganti untuk getter dan setter. Ia hanya membenarkan anda mengendalikan panggilan kaedah atau akses harta yang sebaliknya akan mengakibatkan ralat."

Implikasi Prestasi

Adalah penting untuk ambil perhatian bahawa kaedah ajaib datang dengan kos prestasi. Menyebutnya adalah lebih perlahan daripada menggunakan getter, setter atau panggilan kaedah langsung yang betul. Oleh itu, mereka harus dikhaskan untuk keadaan luar biasa di mana pengendalian isu ketidakbolehcapaian adalah perlu.

Kesimpulan

Walaupun __get dan __set mungkin kelihatan seperti penyelesaian yang mudah untuk pengambil dan penetap terlebih muatan , tujuan sebenar mereka terletak dalam menguruskan had akses harta benda. Memahami peranan tepat mereka adalah penting untuk pembangunan kod PHP yang berkesan. Dengan menerima pengetahuan ini, anda boleh mengelakkan penalti prestasi yang tidak perlu dan memastikan kestabilan kod.

Atas ialah kandungan terperinci Adakah __get dan __set Benar-benar Hanya Melebihkan Getter dan Setters dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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