วันเสาร์ที่ 15 กุมภาพันธ์ พ.ศ. 2568

[PHP] ความเข้าใจง่าย ๆ เกี่ยวกับ Visibility ใน PHP

เวลาเราสร้างคลาส (Class) ใน PHP เราจะต้องกำหนดว่าแต่ละตัวแปร (Property) และฟังก์ชัน (Method) จะให้ใช้งานได้จากที่ไหน ซึ่งนี่แหละที่เรียกว่า Visibility หรือ ระดับการเข้าถึง นั่นเอง

Visibility มีอะไรบ้าง?

ใน PHP มี 3 ระดับหลัก ๆ ได้แก่:

  1. public (สาธารณะ) – ใช้ได้จากทุกที่ ไม่ว่าจะเป็นภายในคลาสเอง นอกคลาส หรือแม้แต่วัตถุที่ถูกสร้างขึ้น
  2. protected (ป้องกัน) – ใช้ได้ภายในคลาสเอง และคลาสลูกที่สืบทอด (extends) เท่านั้น
  3. private (ส่วนตัว) – ใช้ได้แค่ภายในคลาสนั้นเท่านั้น คลาสลูกก็แตะต้องไม่ได้


ตัวอย่างการใช้งานแบบง่าย ๆ

มาลองดูโค้ดตัวอย่างกันว่า Visibility ส่งผลยังไง

<?php
class Car {
    public $brand; // ทุกคนเข้าถึงได้
    protected $engine; // ใช้ได้เฉพาะในคลาสนี้และคลาสลูก
    private $owner; // ใช้ได้แค่ในคลาสนี้เท่านั้น

    public function __construct($brand, $engine, $owner) {
        $this->brand = $brand;
        $this->engine = $engine;
        $this->owner = $owner;
    }

    public function showCarInfo() {
        echo "ยี่ห้อ: $this->brand, เครื่องยนต์: $this->engine, เจ้าของ: $this->owner";
    }
}

class SportsCar extends Car {
    public function showEngine() {
        echo "เครื่องยนต์: $this->engine"; // ใช้ได้เพราะเป็น protected
    }
}

$myCar = new Car("Toyota", "V8", "สมชาย");
echo $myCar->brand; // ใช้ได้ เพราะเป็น public

$myCar->showCarInfo(); // ใช้ได้ เพราะเป็น public

// echo $myCar->engine; // ใช้ไม่ได้ เพราะเป็น protected
// echo $myCar->owner; // ใช้ไม่ได้ เพราะเป็น private
?>

อธิบายให้เข้าใจง่าย ๆ

  • ตัวแปร brand เป็น public ใครก็เรียกใช้ได้เลย
  • ตัวแปร engine เป็น protected ใช้ได้แค่ในคลาส Car และคลาสที่สืบทอดจากมัน
  • ตัวแปร owner เป็น private ใช้ได้แค่ภายใน Car เท่านั้น แม้แต่คลาสลูกก็แตะต้องไม่ได้


สรุปสั้น ๆ

  • ใช้ public ถ้าต้องการให้ทุกคนเข้าถึงได้
  • ใช้ protected ถ้าต้องการให้เฉพาะคลาสตัวเองและคลาสลูกใช้ได้
  • ใช้ private ถ้าต้องการปกปิดข้อมูลไว้ภายในคลาสตัวเองเท่านั้น

ถ้าคุณเข้าใจหลักการนี้ ก็จะช่วยให้คุณจัดการข้อมูลในคลาสได้ดีขึ้น ป้องกันการเปลี่ยนแปลงค่าที่ไม่พึงประสงค์ และทำให้โค้ดของคุณเป็นระเบียบมากขึ้น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น