Metode akses PHP5 memungkinkan Anda membatasi akses ke anggota kelas. Ini adalah fitur baru di PHP5, tetapi sudah ada di banyak bahasa berorientasi objek. Dengan metode akses, Anda dapat mengembangkan aplikasi berorientasi objek yang andal dan membangun objek yang dapat digunakan kembali. perpustakaan kelas berorientasi.
Seperti C++ dan Java, PHP memiliki tiga metode akses: publik, pribadi dan dilindungi. Untuk metode akses anggota kelas, ini bisa menjadi salah satunya. Jika Anda tidak menentukan metode akses, akses adalah secara default Metodenya bersifat publik. Anda juga dapat menentukan metode akses untuk anggota statis dengan menempatkan metode akses sebelum kata kunci statis (misalnya,
anggota publik statis dapat diakses tanpa batasan. Kode apa pun di luar kelas dapat membaca dan menulis properti publik . Anda dapat memanggil metode publik dari mana saja di skrip Anda. Di versi PHP sebelumnya, semua metode dan properti bersifat publik, yang membuat objek terasa seperti array yang terstruktur dengan baik.
Hanya terlihat di dalam kelas dari properti pribadi di luar metode kelas di mana ia berada. Demikian pula, hanya metode dalam kelas yang sama yang dapat memanggil metode pribadi. Tidak ada yang dapat mewarisi subkelas. Mengakses anggota pribadi di kelas
induk kelas dapat mengakses anggota pribadi. Lihat Contoh 6.8, metode sama membandingkan dua widget. Operator == membandingkan dua widget dari kelas yang sama, tetapi dalam contoh ini setiap instance objek memiliki ID unik dan harga. Perhatikan bagaimana metode yang sama mengakses properti pribadi dari instance Widget lain. Baik Java dan C mengizinkan operasi
ini
widget kelas
{
pribadi $nama;
pribadi $harga;
pribadi $id;
fungsi publik __konstruksi($nama, $harga)
{
$ini->nama = $nama;
$ini->harga = floatval($harga);
$ini->id = uniqid();
}
//memeriksa apakah dua widget sama Memeriksa apakah dua widget sama
fungsi publik sama dengan($widget)
{
return(($ini->nama == $widget->nama)DAN
($ini->harga == $widget->harga));
}
}
$w1 = Widget baru('Gigi', 5.00);
$w2 = Widget baru('Gigi', 5.00);
$w3 = Widget baru('Gigi', 7.00);
//BENAR
if($w1->sama dengan($w2))
{
print("w1 dan w2 saman");
}
//PALSU
if($w1->sama dengan($w3))
{
print("w1 dan w3 saman");
}
//FALSE, == menyertakan id sebagai perbandingan
if($w1 == $w2) //tidak sama karena ID-nya berbeda
{
print("w1 dan w2 saman");
}
?>
Jika Anda baru mengenal pemrograman berorientasi objek, Anda mungkin bertanya-tanya apa tujuan menggunakan anggota privat untuk membantu merangkum data .Mereka dapat disembunyikan di dalam kelas tanpa diakses oleh kode di luar kelas. Mereka juga membantu mencapai kopling longgar. Jika kode di luar struktur data tidak dapat mengakses properti internal secara langsung, tentu saja tidak akan ada hubungan
implisit properti pribadi masih dapat dibagikan dengan kode eksternal. Solusinya adalah dengan menggunakan sepasang metode publik, yang satu adalah get (mendapatkan nilai properti), yang lainnya adalah set (mengatur nilai properti). nilai awal. Hal ini memungkinkan komunikasi antar anggota terjadi melalui antarmuka yang sempit dan berkualifikasi baik. Hal ini juga memberikan peluang untuk mengubah nilai yang diteruskan ke metode. Perhatikan pada Contoh 6.8 bagaimana konstruktor memaksa harga menjadi Nomor float (floadval( )).
Anggota yang dilindungi dapat diakses oleh semua metode di kelas yang sama dan di kelas yang diwariskan. Properti publik melanggar semangat enkapsulasi karena memungkinkan subkelas bergantung pada Menulis atribut tertentu ke metode yang dilindungi tidak menimbulkan masalah ini menggunakan metode yang dilindungi harus jelas tentang struktur kelas induknya.
Perhatikan bahwa Widget sekarang memiliki metode yang dilindungi yang disebut getName. Jika sebuah instance dari Widget mencoba memanggil metode yang dilindungi, kesalahan akan terjadi: $w1->getName( ) menghasilkan kesalahan. Tetapi metode getName di subkelas Thing dapat memanggil metode yang dilindungi ini. Tentu saja, untuk membuktikan bahwa metode Widget::getName dilindungi, contoh ini tampaknya terlalu sederhana memahami struktur internal objek.
<?php
widget kelas
{
pribadi $nama;
pribadi $harga;
pribadi $id;
fungsi publik __konstruksi($nama, $harga)
{
$ini->nama = $nama;
$ini->harga = floatval($harga);
$ini->id = uniqid();
}
//memeriksa apakah dua widget sama
fungsi publik sama dengan($widget)
{
return(($ini->nama == $widget->nama)DAN
($ini->harga == $widget->harga));
}
fungsi yang dilindungi getName()
{
return($ini->nama);
}
}
kelas Hal memperluas Widget
{
pribadi $warna;
fungsi publik setColor($warna)
{
$ini->warna = $warna;
}
fungsi publik getColor()
{
return($ini->warna);
}
fungsi publik getName()
{
kembali(induk::getName());
}
}
$w1 = Widget baru('Gigi', 5.00);
$w2 = Hal baru('Gigi', 5.00);
$w2->setColor('Yellow');
//TRUE (masih!) Hasilnya masih benar
if($w1->sama dengan($w2))
{
print("w1 dan w2 saman");
}
//cetak roda gigi keluaran roda gigi
print($w2->getNama());
?>
Subkelas dapat mengubah cara metode diakses dengan mengganti metode kelas induk. Namun, masih ada beberapa batasan. Jika Anda mengganti anggota kelas publik, maka harus tetap publik di subkelas anggota, ia dapat tetap dilindungi atau menjadi anggota publik. Anggota pribadi masih hanya terlihat di kelas saat ini. Mendeklarasikan anggota dengan nama yang sama dengan anggota pribadi kelas induk hanya akan membuat anggota berbeda di kelas saat ini Anda tidak dapat mengganti anggota pribadi.
Kata kunci Final adalah cara lain untuk membatasi akses ke metode anggota. Subkelas tidak dapat mengganti metode yang ditandai final di kelas induk.