⚔️მაგალითი

განვიხილოთ ასეთი მაგალითი. პროგრამაში გარკვეული მიზეზებიდან გამომდინარე დაგვჭირდა სამი კლასის შექნა, ესენია პროგრამისტი, დიზაინერი და ტესტერი.

  • სამივეს გააჩნიათ საერთო თვისებები - სახელი, გვარი, ხელფასი

  • საერთო მეთოდი დაწინაურება ( ხელფასი იზრდება 500 ლარით).

მაგრამ თითოეულ მათგანს ასევე გააჩნია უნიკალური თვისებები მაგალითად

  • პროგრამისტს - ფრეიმვორკი

  • დიზაინერს - საყვარელი ფერი

  • ტესტერს კი აპლიკაციის სახელი რომელზეც ახლა მუშაობს.

ამ მაგალითში ადვილად დავინახავთ მემკვიდრეობითობის მთელ რიგ უპირატესობებს. ქვემოთ იმპლემენტირებულია ამ მაგალითის კოდი მემკვიდრეობითობის გამოყენებით და მის გარეშე.

<?php

// მშობელი კლასი
class Human {
    public string $name;
    public string $lastName;
    public int $salary;

    public function __construct(string $name,string $lastName, int $salary)
    {
        $this->name = $name;
        $this->lastName = $lastName;
        $this->salary = $salary;
    }
    
    public function promote()
    {
        $this->salary = $this->salary + 500;
    }
}

// შვილი კლასი
class Programmer extends Human{
    public string $framework;

    public function __contruct(string $name,string $lastName, int $salary, string $framework)
    {
        // საჭიროა მშობელი კონსტრუქტორის გამოძახება
        parent::__construct($name,$lastName,$salary);
        $this->framework = $framework;
    }
}

// შვილი კლასი
class Designer extends Human{
    public string $favoriteColor;

    public function __contruct(string $name,string $lastName, int $salary, string $favoriteColor)
    {
        parent::__construct($name,$lastName,$salary);
        $this->favoriteColor = $favoriteColor;
    }
}

// შვილი კლასი
class Tester extends Human{
    public string $currentApp;

    public function __contruct(string $name,string $lastName, int $salary, string $currentApp)
    {
        parent::__construct($name,$lastName,$salary);
        $this->currentApp = $currentApp;
    }
}

// მემკვიდრე/შვილი კლასის ინსტანსები ჩვეულებრივ იქმნება
$dev = new Programmer('Uncle','Bob',1000,'Laravel');
$des = new Designer('Christopher','Nolan',1000,'Dark');
$tst = new Tester('Robert','De. Niro',1000,'YouTube');

// და ჩვეულებრივ ვმუშაობთ მათთან
$dev->promote();
echo "$dev->name $dev->lastName salary - $dev->salary \n";

ასევე უნდა აღვნიშნო ისიც, ლარაველში უკვე არაერთხელ გქონიათ მემკვიდრეობითობასთან შეხება. მაგალითად როდესაც ქმნით კონტროლერს, ის აცუილებლად აექსთენდებს შემდეგ კლასს App\Http\Controllers\Controller

როდესაც ქმნით ელოქვენთის მოდელს ის აექსთენდებს ელოქვენთის Model კლასს და ა.შ.

Last updated