Dalam PHP, mengakses sifat dilindungi objek menggunakan -> operator secara langsung tidak dibenarkan. Ini boleh menjadi satu cabaran apabila anda perlu bekerja dengan sifat ini.
Jika anda berurusan dengan versi PHP yang lebih lama, seperti 5.2.17, menggunakan kaedah ReflectionClass untuk mengakses sifat yang dilindungi bukanlah pilihan.
Penyelesaian:
Nasib baik, terdapat penyelesaian yang agak mudah untuk ini isu:
function accessProtected($obj, $prop) { $reflection = new ReflectionClass($obj); $property = $reflection->getProperty($prop); $property->setAccessible(true); return $property->getValue($obj); }
Fungsi ini mengambil dua parameter: objek yang mengandungi harta yang dilindungi dan nama harta yang anda ingin akses. Ia menggunakan kelas ReflectionClass untuk mencipta pantulan objek dan kemudian menggunakan kaedah getProperty() untuk mendapatkan harta tertentu. Akhir sekali, ia menetapkan kebolehcapaian harta kepada benar menggunakan kaedah setAccessible() dan kemudian mendapatkan semula nilai menggunakan kaedah getValue().
Contoh Penggunaan:
$obj = new Fields_Form_Element_Location(); $currentValue = accessProtected($obj, '_value');
Kaveat:
Perhatikan bahawa penyelesaian ini bukan serasi secara universal. Sesetengah rangka kerja PHP atau pelaksanaan objek tertentu mungkin mempunyai sekatan tambahan yang menghalang akses luaran kepada sifat yang dilindungi. Anda dinasihatkan untuk menyemak dokumentasi rangka kerja atau pustaka objek anda untuk mengesahkan keserasian sebelum menggunakan teknik ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Hartanah Dilindungi dalam Versi PHP Lama (cth., 5.2.17)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!