ข้อดีของ Setters และ Getters ใน OOP ใน PHP
ในบทเรียนที่แล้วเราได้สร้าง getter และ setter สำหรับ แต่ละคุณสมบัติ อาจมีคำถามว่า ทำไมต้องใช้ ความซับซ้อนแบบนี้ ในเมื่อจริงๆ แล้ว ผลลัพธ์เดียวกันสามารถบรรลุได้ หาก กำหนดให้คุณสมบัติเป็นสาธารณะ (public) แทนที่จะเป็นส่วนตัว (private)
ประเด็นคือ getters และ setters มี ข้อได้เปรียบ: ก่อนที่จะเข้าถึงคุณสมบัติ สามารถทำการตรวจสอบบางอย่างได้ ตัวอย่างเช่น ในกรณีของเรา เมื่อเขียน ชื่อและนามสกุล เราสามารถตรวจสอบ ว่าค่าใหม่ไม่ใช่ สตริงว่าง:
<?php
class User {
private $name;
private $surn;
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'name is incorrect';
}
}
public function setSurn($surn) {
if (strlen($surn) > 0) {
$this->surn = $surn;
} else {
echo 'surn is incorrect';
}
}
public function getName() {
return $this->name;
}
public function getSurn() {
return $this->surn;
}
}
?>
มาทดสอบกันว่ามันทำงานอย่างไร เริ่มต้นด้วยการสร้างอ็อบเจ็กต์ของคลาส:
<?php
$user = new User();
?>
ทีนี้ลองเขียน ค่าที่ถูกต้อง:
<?php
$user->setName('john');
?>
และตอนนี้ลองเขียน ค่าที่ไม่ถูกต้อง:
<?php
$user->setName(''); // ข้อผิดพลาด
?>
ในคลาส Employee ใน setter
ของอายุ ให้ทำการตรวจสอบว่า
อายุควรอยู่ระหว่าง
0 ถึง 120
ในคลาส Employee ใน getter
ของเงินเดือน ให้ทำดังนี้
เมื่ออ่านเงินเดือน ให้เพิ่มเครื่องหมายดอลลาร์
ไปที่ส่วนท้ายของ
ค่าของมัน