Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah kaedah sihir __get dan __set PHP tidak digunakan semasa mengakses harta awam?

Mengapakah kaedah sihir __get dan __set PHP tidak digunakan semasa mengakses harta awam?

Barbara Streisand
Barbara Streisandasal
2024-11-25 19:59:15881semak imbas

Why are PHP's __get and __set magic methods not invoked when accessing a public property?

Kaedah Ajaib __get dan __set dalam PHP

PHP menyediakan kaedah ajaib yang membolehkan pembangun membebankan operasi tertentu, seperti akses harta dan panggilan kaedah. Antara kaedah ini ialah __get dan __set, yang direka bentuk untuk mengatasi gelagat lalai akses harta benda.

Kod yang disediakan mentakrifkan kelas foo dengan sifat awam dan kaedah ajaib __get dan __set. Walau bagaimanapun, apabila cuba menggunakan kaedah ini untuk mengakses $foo->bar, hanya harta awam sedang diakses.

Ini kerana __get dan __set digunakan hanya apabila harta atau kaedah tidak boleh diakses. Memandangkan $foo->bar ialah harta awam, kaedah ajaib tidak dicetuskan.

Seperti dalam manual PHP, __get dilaksanakan apabila membaca data daripada sifat tidak boleh diakses dan __set digunakan apabila menulis data kepada tidak boleh diakses harta benda. Dalam kes ini, ahli kelas adalah awam dan oleh itu boleh diakses, menjadikan kaedah sihir tidak relevan.

Daripada menggunakan kaedah sihir, pertimbangkan untuk melaksanakan getter dan setter yang betul atau mengakses terus sifat untuk tingkah laku yang lebih cekap dan boleh diramal. Kaedah ajaib harus dikhaskan untuk kes luar biasa di mana sifat atau kaedah tidak boleh diakses dengan cara biasa.

Atas ialah kandungan terperinci Mengapakah kaedah sihir __get dan __set PHP tidak digunakan semasa mengakses harta awam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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