⊗ppOpFnMt 64 of 107 menu

PHP-də OOP-də Abstrakt Üsullar

Abstrakt siniflər həmçinin abstrakt üsulları ehtiva edə bilər. Belə üsulların realizasiyası olmamalıdır, onlar varislərin bu cür üsullara malik olmalı olduğunu göstərmək üçün lazımdır. Əslində bu üsulların realizasiyası artıq varislərin vəzifəsidir.

Bir üsulu abstrakt elan etmək üçün onun elanında abstract açar sözü yazılmalıdır.

Gəlin praktikada sınayaq. Tutaq ki, User sinfinin bütün varisləri increaseRevenue metoduna malik olmalıdır.

Bu metod istifadəçinin cari gəlirini götürməli və onu parametr kimi ötürülən müəyyən bir dəyər qədər artırmalıdır.

User sinfinin özü bilmir ki, varis hansı xüsusi gəliri əldə edəcək - axı işçi üçün bu maaş, tələbə üçün isə təqaüddür. Buna görə də hər bir varis bu metodu öz üsulu ilə həyata keçirəcək.

Burada mahiyyət ondadır ki, User sinfinin abstrakt metodu proqramçını varislərdə bu metodu realizasiya etməyə məcbur edir, əks halda PHP səhv verəcək. Beləliklə, siz və ya kodunuzla işləyən başqa bir proqramçı, varisdə lazımi metodu realizasiya etməyi heç cür unuda bilməz.

Beləliklə, gəlin praktikada sınayaq. Gəlin User sinfinə increaseRevenue abstrakt metodunu əlavə edək:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Bodensiz abstrakt metod: abstract public function increaseRevenue($value); } ?>

Bu zaman Employee sinfimiz dəyişməz qalsın. Bu halda, hətta Employee sinfinin obyektini yaratmasaq belə, sadəcə siniflərimizin təyin olunduğu kodu işə saldıqda - PHP səhv verəcək.

İndi gəlin Employee sinfində increaseRevenue metodunun realizasiyasını yazaq:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Metodun realizasiyasını yazaq: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Gəlin sinfimizin işini yoxlayaq:

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

Gəlin increaseRevenue metodunu Student sinfində də realizasiya edək. Ancaq bu dəfə metodumuz artıq təqaüdü artıracaq:

<?php class Student extends User { private $scholarship; // təqaüd public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Metod təqaüdü artırır: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

User sinfinizə eyni increaseRevenue abstrakt metodunu əlavə edin. Bu metodun realizasiyasını EmployeeStudent siniflərində yazın.

Figure sinfində fiqurun sahəsini və perimetrini almaq üçün abstrakt üsullar edin.

azbydeenesfrkakkptruuz