Interface dalam OOP di PHP
Seperti yang sudah Anda ketahui, kelas abstrak merepresentasikan seperangkat metode untuk keturunannya. Sebagian dari metode ini dapat diimplementasikan dalam kelas itu sendiri, dan sebagian metode lainnya dapat dideklarasikan sebagai abstrak dan memerlukan implementasi di kelas turunan.
Bayangkan sebuah situasi di mana kelas abstrak Anda hanya merupakan kumpulan metode abstrak publik, tanpa menambahkan metode dengan implementasi.
Secara faktual, kelas induk Anda menggambarkan interface dari keturunannya, yaitu kumpulan metode publik mereka yang wajib untuk diimplementasikan.
Mengapa kita membutuhkan ini: untuk melakukan lebih sedikit kesalahan saat memprogram - dengan mendeskripsikan semua metode yang diperlukan di kelas induk, kita dapat yakin bahwa semua keturunan benar-benar mengimplementasikannya.
Kapan ini membantu: katakanlah kita membuat kelas induk kita dan beberapa keturunan untuknya. Jika kemudian setelah beberapa waktu, misalnya, sebulan kemudian, kita memutuskan untuk membuat satu lagi keturunan, pasti kita akan lupa detail kode kita dan sangat mungkin kita lupa menulis implementasi dari beberapa metode dalam keturunan baru tersebut. Namun, PHP sendiri tidak akan membiarkan metode tersebut hilang - dan hanya akan memberikan error.
Hal yang sama berlaku untuk programmer lain, yang bekerja dengan proyek Anda. Katakanlah kode kelas induk ditulis oleh Anda, dan kemudian rekan Anda memutuskan untuk membuat satu keturunan lagi. Rekan Anda juga tidak akan bisa kehilangan beberapa metode.
Namun, ada masalah: secara faktual kita membuat kelas induk kita untuk menulis metode abstrak publik di dalamnya, tetapi kita sendiri atau rekan kita memiliki kemungkinan untuk secara tidak sengaja menambahkan ke kelas ini metode yang bukan publik atau bukan abstrak.
Katakanlah kita ingin secara fisik melarang membuat metode lain dalam induk, selain metode abstrak publik. Di PHP, untuk ini, alih-alih kelas abstrak, kita dapat menggunakan interface.
Interface merepresentasikan kelas, yang mana semua metodenya adalah publik dan tidak memiliki implementasi. Kode metode harus diimplementasikan oleh kelas-kelas yang merupakan keturunan dari interface.
Interface dideklarasikan dengan cara yang sama seperti kelas biasa,
tetapi menggunakan kata kunci interface
sebagai pengganti kata class.
Untuk pewarisan dari interface, digunakan
terminologi yang sedikit berbeda: dikatakan bahwa
kelas tidak mewarisi dari interface, tetapi mengimplementasikan
mereka. Oleh karena itu, sebagai pengganti kata extends
harus menggunakan kata kunci
implements.
Tidak dapat membuat objek dari interface. Semua metode
interface harus dideklarasikan sebagai public
dan tidak boleh memiliki implementasi. Sebuah interface
hanya dapat memiliki metode, bukan properti.
Juga tidak dapat membuat interface dan kelas dengan
nama yang sama.