PHPda OOP interfeyslari
Bilganingizdek, abstrakt sinflar o'z vorislari uchun metodlar to'plamini taqdim etadi. Ushbu metodlarning bir qismi sinfning o'zida amalga oshirilishi mumkin, qolgan qismi esa abstrakt metodlar sifatida e'lon qilinadi va voris sinflarda amalga oshirilishi talab qilinadi.
Tasavvur qiling, sizning abstrakt sinfingiz faqatgina abstrakt ochiq metodlar to'plamidan iborat bo'lib, amalga oshirilgan metodlarni qo'shmasdan.
Aslida sizning ota sinfingiz vorislarning interfeysini tavsiflaydi, ya'ni ularning amalga oshirilishi majburiy bo'lgan ochiq metodlar to'plamini.
Nima uchun bu kerak: dasturlashda kamroq xatolarga yo'l qo'ymaslik uchun - barcha kerakli metodlarni ota-sinfda tavsiflab, biz vorislarning ularni haqiqatdan ham amalga oshirishiga ishonch hosil qilamiz.
Bu qachon yordam beradi: faraz qilaylik, biz ota-sinfni va unga bir nechta voris sinflarni yaratdik. Agar keyin ma'lum vaqt o'tgach, masalan, bir oydan so'ng, biz yana bitta voris yaratmoqchi bo'lsak, kodimizning tafsilotlarini unta qo'yishimiz aniq va yangi vorisda biron bir metodni amalga oshirishni unutishimiz mumkin. Biroq PHPning o'zi metodni yo'qotishga imkon bermaydi - va shunchaki xatolik chiqaradi.
Xuddi shu narsa boshqa dasturchiga, sizning loyihangiz bilan ishlayotganiga ham tegishli. Faraz qilaylik, ota-sinf kodini siz yozgansiz, keyin esa hamkasbingiz yana bitta voris yaratishga qaror qildi. Hamkasbingiz ham bir nechta metodni yo'qotib qo'yolmaydi.
Biroq, muammo bor: aslida biz ota-sinfimizni faqatgina unda abstrakt ochiq metodlar yozish uchun yaratdik, lekin bizning o'zimiz yoki hamkasbimiz tasodifan bu sinfga ochiq bo'lmagan metod yoki abstrakt bo'lmagan metod qo'shish imkoniyatiga ega.
Faraz qilaylik, biz otada abstrakt ochiq metodlardan tashqari boshqa metodlar qilishni jismonan taqiqlashni xohlaymiz. PHPda buning uchun abstrakt sinflar o'rniga interfeyslar ishlatish mumkin.
Interfeyslar barcha metodlari ochiq va amalga oshirilishi bo'lmagan sinflardir. Metodlarning kodini interfeyslarning voris sinflari amalga oshirishi kerak.
Interfeyslar oddiy sinflar kabi e'lon qilinadi, lekin
class so'zi o'rniga interface kalit so'zidan
foydalaniladi.
Interfeyslardan meros olish uchun biroz boshqa terminologiya
qo'llaniladi: deyiladiki, sinflar interfeyslardan meros
olmaydi, balki ularni amalga oshiradi.
Shunga mos ravishda extends so'zi o'rniga
implements kalit so'zi ishlatiladi.
Interfeys ob'ektini yaratib bo'lmaydi. Interfeysning barcha
metodlari public sifatida e'lon qilinishi kerak va
amalga oshirilishi bo'lmasligi kerak. Interfeysda faqat
metodlar bo'lishi mumkin, xususiyatlar emas. Shuningdek,
bir xil nomdagi interfeys va sinfni yaratib bo'lmaydi.