ข้อดีของ Setters และ Getters ใน OOP ใน PHP

ในบทเรียนที่แล้วเราได้สร้าง getter และ setter สำหรับ แต่ละคุณสมบัติ อาจมีคำถามว่า ทำไมต้องใช้ ความซับซ้อนแบบนี้ ในเมื่อจริงๆ แล้ว ผลลัพธ์เดียวกันสามารถบรรลุได้ หาก กำหนดให้คุณสมบัติเป็นสาธารณะ (public) แทนที่จะเป็นส่วนตัว (private)

ประเด็นคือ getters และ setters มี ข้อได้เปรียบ: ก่อนที่จะเข้าถึงคุณสมบัติ สามารถทำการตรวจสอบบางอย่างได้ ตัวอย่างเช่น ในกรณีของเรา เมื่อเขียน ชื่อและนามสกุล เราสามารถตรวจสอบ ว่าค่าใหม่ไม่ใช่ สตริงว่าง:

php<?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<?php
  $user = new User();
?>

ทีนี้ลองเขียน ค่าที่ถูกต้อง:

php<?php
  $user->setName('john');
?>

และตอนนี้ลองเขียน ค่าที่ไม่ถูกต้อง:

php<?php
  $user->setName(''); // ข้อผิดพลาด
?>
Задание 1

ในคลาส Employee ใน setter ของอายุ ให้ทำการตรวจสอบว่า อายุควรอยู่ระหว่าง 0 ถึง 120

Задание 2

ในคลาส Employee ใน getter ของเงินเดือน ให้ทำดังนี้ เมื่ออ่านเงินเดือน ให้เพิ่มเครื่องหมายดอลลาร์ ไปที่ส่วนท้ายของ ค่าของมัน