⚔️ინტერფეისი

ინტერფეისი საშუალებას გვაძლევს რომ განვსაზღვროთ თუ რა მეთოდები უნდა დააიმპლემენტიროს (განუსაზღვროს ლოგიკა) კლასმა რომელიც მას დააექსთენდებს. ის აბსტრაქტული კლასისგან განსხვავდება იმით, რომ მას არ შეუძლია გააჩნდეს საკუთარი თვისებები ან მეთოდები რომელიც საერთო იმ კლასებისათვის რომლებიც "განავცრობენ" ამ ინტერფეისს. ინტერფეისის სინტაქსი კლასისაგან ორი ძირითადი ნიშნით განსხვავდება. პირველი არის ის, რომ ვიყენებთ interface ქივორდს, ხოლო მეორე ის რომ ყველა მეთოდი უნდა იყოს public.

<?php

interface StorageService
{
    public function store($data); // ლოგიკა არ არის განსაზღვრული
    public function fetch();      // ყველა მეთოდი public-ია
}

// მონაცემთა ბაზის კლასი
class DatabaseService implements StorageService
{
    public function store($data)
    {
        // მაგალითის სიმარტივისთვის წარმოვიდგინოთ რომ აქ წერია განხორციელების გზა
        // store data in database Code
    }
    public function fetch()
    {
        // fetch data from database Code
    }
}

// რედისის კლასი ქეშირებისთის
class RedisService implements StorageService
{
    public function store($data)
    {
        // Cache data  Code
    }
    public function fetch()
    {
        // fetch Cached data  Code
    }
}

// [!] ეს კლასი ედიტორის დონეზეც კი ერორს აჩვენებს ვინაიდან
// [!] ის არ ახორციელებს store და fetch მეთოდების იმპლემენტაციას
// ფაილების სახით შემნახავი კლასი
class FilesService implements StorageService  
{
    // [!] Error

    public function writeInFile($data) // ვინაიდან მეთოდის სახელი არ არის store ერორია
    {
        // write data into some file
    }
    public function ReadFromFile()// ვინაიდან მეთოდის სახელი არ არის fetch ერორია/
    {
        // fetch data  from file
    }
}

Last updated