การเรียกใช้งานเมธอดที่ถูกโอเวอร์ไรด์ใน OOP ใน PHP
เมื่อมีการโอเวอร์ไรด์ คลาสลูกจะสูญเสีย
การเข้าถึงเมธอดที่ถูกโอเวอร์ไรด์
ของคลาสพ่อแม่ อย่างไรก็ตาม ยังสามารถ
เข้าถึงมันได้อยู่ สิ่งนี้ทำได้
โดยใช้คำสำคัญ parent,
ซึ่งชี้ไปยังคลาสพ่อแม่
มาดูตัวอย่าง เมื่อเราอาจต้องการการเข้าถึง ไปยังเมธอดของคลาสพ่อแม่ สมมติว่าเรามี คลาสพ่อแม่ดังต่อไปนี้:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
สมมติว่าในคลาสลูก เราได้โอเวอร์ไรด์เมธอดของคลาสพ่อแม่:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
จะสังเกตได้ว่าในเมธอดที่โอเวอร์ไรด์ เมื่อเงื่อนไขเป็นจริง การทำงานที่แท้จริง คือโค้ดของเมธอดคลาสพ่อแม่ ซึ่งทำให้เกิดการซ้ำซ้อนของโค้ดที่ไม่จำเป็น
สามารถกำจัดมันได้โดยการเรียก เมธอดของคลาสพ่อแม่ มาลองทำดู:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // เมธอดของคลาสพ่อแม่
} else {
echo 'student name error';
}
}
}
?>
กำหนดโค้ดต่อไปนี้:
<?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';
}
}
}
?>
ในคลาส Employee กรุณาแก้ไข
และลดความซับซ้อนของเซ็ตเตอร์อายุ โดยใช้
เมธอดดั้งเดิมของคลาสพ่อแม่