⊗ppOpFnCl 63 of 107 menu

აბსტრაქტული კლასები OOP-ში PHP-ში

დავუშვათ, გაქვთ კლასი User, და მისგან მემკვიდრეობით ღებულობენ კლასები Employee და Student.

ამ შემთხვევაში, ვარაუდობენ, რომ თქვენ შექმნით Employee და Student კლასების ობიექტებს, მაგრამ User კლასის ობიექტებს - არ შექმნით, რადგან ეს კლასი გამოიყენება მხოლოდ მისი მემკვიდრეთა საერთო თვისებებისა და მეთოდების დასაჯგუფებლად.

ამ შემთხვევაში შესაძლებელია User კლასის ობიექტების შექმნა იძულებით აეკრძალოს, რათა თქვენ ან სხვა პროგრამისტმა სადღაც შემთხვევით არ შექმნათ ისინი.

ამისთვის არსებობს ე.წ. აბსტრაქტული კლასები. აბსტრაქტული კლასები წარმოადგენენ კლასებს, რომლებიც განკუთვნილია მათგან მემკვიდრეობის მისაღებად. ამ შემთხვევაში, ასეთი კლასების ობიექტების შექმნა შეუძლებელია.

იმისთვის, რომ კლასი აბსტრაქტულად გამოვაცხადოთ, მის გამოცხადებისას უნდა დავწეროთ საკვანძო სიტყვა abstract:

<?php abstract class User { } ?>

მაშ ასე, დავწეროთ აბსტრაქტული კლასის User რეალიზაცია. დავუშვათ, მას ექნება პრივატული თვისება name, და აგრეთვე გეთერები და სეთერები მისთვის:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } } ?>

User კლასის ობიექტის შექმნის მცდელობა გამოიწვევს შეცდომას:

<?php $user = new User; // გამოიტანს შეცდომას ?>

მაგრამ ჩვენი კლასიდან მემკვიდრეობის მიღება შესაძლებელი იქნება. შევქმნათ კლასი Employee, რომელიც მემკვიდრეობით მიიღებს ჩვენი აბსტრაქტული კლასისგან User:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } } ?>

შევქმნათ Employee კლასის ობიექტი - ყველაფერი იმუშავებს:

<?php $employee = new Employee; $employee->setName('john'); // მშობელი კლასის, ანუ User კლასის მეთოდი $employee->setSalary(1000); // საკუთარი მეთოდი, ანუ Employee კლასის მეთოდი echo $employee->getName(); // გამოიტანს 'john' echo $employee->getSalary(); // გამოიტანს 1000 ?>

შექმენით აბსტრაქტული კლასი Figure, რომელიც წარმოადგენს გეომეტრიულ ფიგურას. დავუშვათ, მისგან მემკვიდრეობით მიიღებენ კლასები წრის, მართკუთხედისა და კვადრატისთვის.

azbydeenesfrkakkptruuz