Gọi phương thức ghi đè trong OOP PHP
Khi ghi đè, lớp con mất quyền truy cập vào
phương thức đã bị ghi đè của
lớp cha. Tuy nhiên, vẫn có thể truy cập
nó. Điều này được thực hiện
bằng từ khóa parent,
trỏ đến lớp cha.
Hãy xem một ví dụ khi nào chúng ta có thể cần truy cập đến phương thức của lớp cha. Giả sử chúng ta có lớp cha sau:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Giả sử chúng ta trong lớp con đã ghi đè phương thức của lớp cha:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Có thể nhận thấy rằng trong phương thức đã ghi đè khi điều kiện được thỏa mãn thực chất là thực thi mã của phương thức lớp cha. Điều này dẫn đến việc lặp mã không cần thiết.
Có thể loại bỏ nó bằng cách gọi phương thức của lớp cha. Hãy thực hiện điều đó:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // phương thức của lớp cha
} else {
echo 'student name error';
}
}
}
?>
Cho đoạn mã sau:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
} else {
echo 'need age less 120';
}
}
}
?>
Trong lớp Employee hãy sửa
và đơn giản hóa phương thức thiết lập tuổi, sử dụng
phương thức gốc của lớp cha.