Phương thức trừu tượng trong OOP PHP
Các lớp trừu tượng cũng có thể chứa các phương thức trừu tượng. Các phương thức như vậy không nên có phần thân triển khai, mà cần để chỉ ra rằng các phương thức như vậy phải có trong các lớp con. Và chính việc triển khai các phương thức đó - là nhiệm vụ của các lớp con.
Để khai báo một phương thức là trừu tượng,
khi khai báo nó, hãy viết từ khóa
abstract.
Hãy thử thực hành. Giả sử rằng
tất cả các lớp con của lớp User phải
có phương thức increaseRevenue.
Phương thức này phải lấy thu nhập hiện tại của người dùng và tăng nó lên một giá trị nào đó, được truyền qua tham số.
Bản thân lớp User không biết chính xác
thu nhập nào sẽ được lớp con nhận - bởi vì đối với nhân viên
đó là lương, còn đối với sinh viên - đó là học bổng. Do đó
mỗi lớp con sẽ triển khai phương thức này
theo cách riêng của nó.
Điểm mấu chốt ở đây là phương thức trừu tượng của lớp
User buộc lập trình viên phải triển khai
phương thức này trong các lớp con, nếu không PHP sẽ báo lỗi.
Bằng cách này, bạn, hoặc một lập trình viên khác,
làm việc với mã của bạn, sẽ không thể nào
quên triển khai phương thức cần thiết
trong lớp con.
Vậy, hãy thử thực hành. Thêm
phương thức trừu tượng increaseRevenue
vào lớp User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Phương thức trừu tượng không có thân:
abstract public function increaseRevenue($value);
}
?>
Giả sử lớp Employee của chúng ta tạm thời giữ nguyên
không thay đổi. Trong trường hợp này, ngay cả khi không
tạo đối tượng của lớp Employee,
mà chỉ chạy mã định nghĩa
các lớp của chúng ta, - PHP sẽ báo lỗi.
Bây giờ hãy viết phần triển khai của phương thức
increaseRevenue trong lớp
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Viết triển khai phương thức:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Hãy kiểm tra hoạt động của lớp chúng ta:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Triển khai phương thức increaseRevenue và
trong lớp Student. Chỉ có điều bây giờ
phương thức của chúng ta sẽ tăng học bổng:
<?php
class Student extends User
{
private $scholarship; // học bổng
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Phương thức tăng học bổng:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Thêm vào lớp User của bạn một
phương thức trừu tượng tương tự increaseRevenue.
Viết phần triển khai của phương thức này trong các lớp
Employee và Student.
Trong lớp Figure, hãy tạo các phương thức trừu tượng
để lấy diện tích và chu vi của hình.