Antara Muka dalam OOP dalam PHP
Seperti yang anda sudah tahu, kelas abstrak mewakili satu set kaedah untuk keturunannya. Sebahagian dari kaedah-kaedah ini mungkin dilaksanakan dalam kelas itu sendiri, dan sebahagian kaedah mungkin diisytiharkan abstrak dan memerlukan pelaksanaan dalam kelas anak.
Bayangkan satu situasi di mana kelas abstrak anda hanya mewakili satu set kaedah abstrak awam, tanpa menambah kaedah dengan pelaksanaan.
Secara faktanya, kelas induk anda menerangkan antara muka bagi keturunan, iaitu set kaedah awam mereka yang wajib untuk dilaksanakan.
Mengapa kita perlukan ini: untuk semasa pengaturcaraan kita melakukan kurang kesilapan - dengan menerangkan semua kaedah yang diperlukan dalam kelas induk, kita boleh yakin bahawa semua keturunan memang melaksanakannya.
Bila ini akan membantu: katakan kita mencipta kelas induk kita dan beberapa keturunan kepadanya. Jika kemudian selepas beberapa waktu, contohnya, selepas sebulan, kita memutuskan untuk mencipta satu lagi keturunan, pasti kita sudah akan lupa butiran kod kita dan mungkin akan lupa untuk menulis pelaksanaan untuk beberapa kaedah dalam keturunan baru. Walau bagaimanapun, PHP sendiri tidak akan membenarkan kehilangan kaedah - dan hanya akan memaparkan ralat.
Perkara yang sama berlaku untuk pengaturcara lain, yang bekerja dengan projek anda. Katakan kod kelas induk ditulis oleh anda, dan kemudian rakan sekerja anda memutuskan untuk mencipta satu lagi keturunan. Rakan sekerja anda juga tidak akan berjaya kehilangan beberapa kaedah.
Namun, ada masalah: secara faktanya kita menjadikan kelas induk kita untuk tujuan menulis kaedah abstrak awam di dalamnya, tetapi kita sendiri atau rakan sekerja kita berpeluang untuk secara tidak sengaja menambah dalam kelas ini kaedah yang bukan awam atau bukan abstrak.
Katakan kita mahu secara fizikal melarang membuat dalam induk kaedah lain, selain daripada abstrak awam. Dalam PHP untuk ini, menggantikan kelas abstrak, kita boleh menggunakan antara muka.
Antara muka mewakili kelas, yang mana semua kaedahnya adalah awam dan tidak mempunyai pelaksanaan. Kod kaedah mesti dilaksanakan oleh kelas-keturunan antara muka.
Antara muka diisytiharkan sama seperti kelas biasa,
tetapi menggunakan kata kunci interface
sebagai ganti perkataan class.
Untuk pewarisan dari antara muka, digunakan
terminologi yang sedikit berbeza: dikatakan bahawa
kelas tidak mewarisi dari antara muka, tetapi melaksanakan
mereka. Sehubungan itu, menggantikan perkataan extends
seseorang harus menggunakan kata kunci
implements.
Tidak boleh mencipta objek antara muka. Semua kaedah
antara muka mesti diisytiharkan sebagai public
dan tidak boleh mempunyai pelaksanaan. Antara muka
hanya boleh mempunyai kaedah, bukan sifat.
Tidak boleh juga membuat antara muka dan kelas dengan
nama yang sama.