⚔️აბსტრაქტული კლასი

PHP-ში ჩვენ გვაქვს აბსტრაქტული კლასები და აბსტრაქტული მეთოდები. იმისათვის რომ კლასი იყოს აბსტრაქტული აუცილებელია მასთან გამოვიყენოთ abstract ქივორდი, და ასევე აუცილებელია რომ ის შეიცავდეს მინიმუმ ერთ აბსტრაქტულ მეთოდს. ხოლო იმისათვის რომ მეთოდი იყოს აბსტრაქტული მასთანაც ასევე ვიყენებთ abstract ქივორდს და არ ვუწერთ ფუნქციის ტანს {} ვინაიდან აბსტრაქტულ მეთოდში მისი იმპლემენტაციის დელატები არ გვაინტერესებს. მოდი განვიხილოთ მაგალითი სადაც ნაჩვენები იქნება სინტაქსი. დავუშვათ გვაქვს ორი მონაცემთა ბაზა MySQL და SQLite. ორივეში გვჭირდება მონაცემების ჩაწერა და ამოღება. და ამავდროულად ორივეს აქვს რაიმე საერთო მეთოდი მაგალითად რაიმე ტექსტის გამოტანა.

<?php
abstract class Database
{
    public $someProperty = 'someValue'; // შეგვიძლია ჩვეულებრივი თვისებები გვქონდეს
    // abstract public $foo; // მაგრამა ბსტრაქტული თვისებეი არა, აბსტრაქცია მხოლოდ მეთოდებს ეხება 
 
    // მეთოდები რომელთა იმპლემენტაცია სავალადებულო იქნება მემკვიდრე კლასებში
    abstract protected function store($data);
    abstract protected function fetch();

    // საერთო მეთოდი რომელის იმპლემენტაციაც ყოველი ობიექტისთვის ერთნაირია
    public function printOut() {
        print "Your Friendly Neighbourhood Database\n";
    }
}

class MySQL extends Database
{
    protected function store($data) {
        // Storing Implementation Details go here
    }

    public function fetch() {
        // Fetching Implementation Details go here
        print "someDataFrom MySQL \n";
    }
}

class SQLite extends Database
{
    protected function store($data) {
        // Storing Implementation Details go here
    }

    public function fetch() {
        // Fetching Implementation Details go here
        print "someDataFrom SQLite \n";
    }
}

// [!] ეს კლასი ედიტორის დონეზეც კი ერორს აჩვენებს ვინაიდან
// [!] ის არ ახორციელებს store და fetch მეთოდების იმპლემენტაციას
class Foo extends Database 
{
    // [!] Error

    public function someMethod($prefix) {
        return "Imagination";
    }
}

Last updated