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