Interfeyslar

Abstrakt sinfga o'xshab, interface - interfeysni meros qilib oladigan sinflar uchun blueprint ni belgilash uchun yaratilinadi. Interfeysda abstrakt metodlar bo'lmaydi ammo hech qanday definition(ta'rif)siz public metodlar mavjud bo'ladi va interfeysni meros qilib oluvchi sinflar bilan, interfeys ichida e'lon qilinadigan metodlarga definition kiritilishi kerak bo'ladi.

Interfeysni belgilash sintaksisi

Sinflar class kalit so'zi orqali belgilansa, bizdagi interface(interfeys) esa interface kalit so'zi orqali belgilanadi. Kalit so'zdan keyin interfeys nomi yoziladi:

<?php
    // interface e'lon qilish
    interface InterfeysNomi{ 
    } 
?>

Sinflarni ishlatganimizda, interfeys ichida e'lon qilingan metodlarni implementatsiya qilish va interfeysdan meros olish uchun implements kalit so'zini ishlatamiz:

<?php
    // class e'lon qilish
    class Sinf implements InterfeysNomi{
    }
?>

Na'muna sifatida

Keling, interfeys ichida e'lon qilingan ba'zi metodlar va o'sha metodlar uchun ta'rif kiritilib, uni implementatsiya qiladigan sinfli interfeys yaratamiz.

Bizning interfeysimiz quyidagicha:

<?php
    // interface e'lon qilish
    interface Form{
    
        // method e'lon qilish
        public function login($email, $password);
        
        public function register($email, $password, $username);
        
        public function logout();
    }
?>

Biz Form nomli interfeys va uning ichida 3ta abstrakt metodlar(login(), register() va logout())ni belgilab oldik. Yuqoridagi kodni ko'rganingizdek, metodlar qabul qiladigan parametrlarni kiritib olganmiz.

Keling, endi yuqoridagi interfeysimizni implementatsiya qiladigan sinf yaratamiz:

<?php
    // class e'lon qilish
    class Tutorialsuz implements Form{
    
        // method ta'rifi
        public function login($email, $password) {
            echo "Foydalanuvchi foydalangan email: " . $email;
        }
        public function register($email, $password, $username) {
            echo "Foydalanuvchi ro'yhatga olindi: Email=".$email." and Username=".$username;
        }
        public function logout() {
            echo "Foydalanuvchi chiqib ketti!";
        }
    }
?>

Yuqorida biz Form interfeysni va interfeys ichidagi e'lon qilingan barcha metodlar uchun tar'if kiritib uni impelementatsiya qildik.

Bir yoki undan ko'p interfeysni implementatsiya qilish

Sinf bir yoki undan ortiq interfeyslarni implementatsiya qilishi mumkin. Bu holatda ham, sinf tomonidan implementatsiyalangan barcha interfeyslar ichida e'lon qilingan metodlar uchun sinfda ta'rif kiritilgan bo'lishi kerak.

Keling, boshqa interfeys yaratamiz:

<?php
    // interface declaration
    interface CMS {
        // methods declaration
        public function publishPost($post);
    }
?>

Endi keling, Tutorialsuz sinfimizga yuqoridagi interfeysimizni ham qo'shamiz:

<?php
    // class e'lon qilish
    class Tutorialsuz implements Form{
    
        // method ta'rifi
        public function login($email, $password) {
            echo "Foydalanuvchi foydalangan email: " . $email;
        }
        public function register($email, $password, $username) {
            echo "Foydalanuvchi ro'yhatga olindi: Email=".$email." and Username=".$username;
        }
        public function logout() {
            echo "Foydalanuvchi chiqib ketti!";
        }
        public function publishPost($post) {
            echo $post." chop etildi!";
        }

    }
?>

Endi bizning Tutorialsuz sinfimiz 2ta interfeysni implementatsiya qiladi.

E'tiborga moyil muhim nuqta-i nazarlar:

  • Interfeys ichida e'lon qilingan barcha metodlar public hisoblanib, aslo abstract kalit so'zi bilan boshlang.
  • Agar biz interfeys ichida e'lon qilingan, hatto bitta metodni ham qoldirib ketadigan bo'lsak, interfeysni implementatsiya qilayotgan sinfda xatolikka duch kelamiz.
  • Interfeyslarda o'zgaruvchilar mavjud bo'lmaydi.

Agar sizga tushunarsiz bo'ladigan bo'lsa, aslo xavotir olmang. Keyingi darslarimizda asta-asta tushunib yetasiz.

abstract sinf va interface o'rtasidagi farq

Interface Abstract sinf
Interfeyslarda konkret metodlar bo'lmaydi. Chunonchi, ta'rifli metodlar. Abstrakt sinfning abstrakt metodi va konkret metodi ham bo'lishi mumkin.
Interfeys ichida e'lon qilingan barcha metodlar public bo'lishi kerak. Abstrakt sinfning public, private va protected metodlari ham bo'lishi mumkin.
Bitta sinf orqali bir qancha interfeyslarni implementatsiya qilish mumkin. Bitta sinf faqat bitta abstrakt sinfdan meros olishi mumkin.