⊗ppOpFnMt 64 of 107 menu

აბსტრაქტული მეთოდები OOP-ში PHP-ში

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

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

შევეცადოთ პრაქტიკაში. დავუშვათ, რომ ვარაუდობენ, რომ User კლასის ყველა მემკვიდრემ უნდა ჰქონდეს მეთოდი increaseRevenue.

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

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

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

მოდით, შევეცადოთ პრაქტიკაში. დავამატოთ აბსტრაქტული მეთოდი increaseRevenue User კლასში:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // აბსტრაქტული მეთოდი ტანის გარეშე: abstract public function increaseRevenue($value); } ?>

დავუშვათ, ჩვენი კლასი Employee ჯერ კიდევ დარჩეს უცვლელი. ამ შემთხვევაში, მაშინაც კი, თუ არ შევქმნით Employee კლასის ობიექტს, არამედ უბრალოდ გავუშვებთ კოდს, რომელშიც განისაზღვრება ჩვენი კლასები, - PHP გამოიტანს შეცდომას.

ახლა დავწეროთ მეთოდის იმპლემენტაცია increaseRevenue Employee კლასში:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // დავწეროთ მეთოდის იმპლემენტაცია: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

შევამოწმოთ ჩვენი კლასის მუშაობა:

<?php $employee = new Employee; $employee->setName('john'); $employee->setSalary(1000); $employee->increaseRevenue(100); echo $employee->getSalary(); ?>

დააიმპლემენტიროს მეთოდი increaseRevenue Student კლასშიც. მხოლოდ ახლა ჩვენი მეთოდი გაზრდის უკვე სტიპენდიას:

<?php class Student extends User { private $scholarship; // სტიპენდია public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // მეთოდი ზრდის სტიპენდიას: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

დაამატეთ თქვენს User კლასში იგივე აბსტრაქტული მეთოდი increaseRevenue. დაწერეთ ამ მეთოდის იმპლემენტაცია Employee და Student კლასებში.

Figure კლასში გახადეთ აბსტრაქტული მეთოდები ფიგურის ფართობისა და პერიმეტრის მისაღებად.

ქართული
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語Қазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა