メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Access Modifiers: Public, Protected, Private

บทความนี้กล่าวถึง Access Modifiers ใน PHP ซึ่งเป็นเครื่องมือสำคัญในการควบคุมการเข้าถึง Properties และ Methods ภายใน Class เพื่อเพิ่มความปลอดภัย, maintainability...

Access Modifiers: Public, Protected, Private

ในโลกของการเขียนโปรแกรมเชิงวัตถุ (OOP) การควบคุมการเข้าถึงข้อมูลและพฤติกรรมของ Object เป็นสิ่งสำคัญอย่างยิ่ง Access Modifiers คือเครื่องมือที่ช่วยให้เรากำหนดขอบเขตการเข้าถึง Properties และ Methods ภายใน Class ซึ่งจะช่วยป้องกันการแก้ไขข้อมูลโดยไม่ได้รับอนุญาต และทำให้ Code ของเรามีความปลอดภัยและ maintainable มากยิ่งขึ้น

Access Modifiers ใน PHP มี 3 ประเภทหลักๆ ได้แก่:

  • public
  • protected
  • private

แต่ละประเภทมีหน้าที่และความแตกต่างกันอย่างไร? เราจะมาเจาะลึกกันในบทความนี้

ความหมายของ Public, Protected, Private

Public

public คือ Access Modifier ที่เปิดกว้างที่สุด เมื่อ Property หรือ Method ถูกกำหนดเป็น public นั่นหมายความว่า ทุกส่วนของ Code สามารถเข้าถึง Property หรือ Method นั้นได้ ไม่ว่าจะเป็น Code ภายใน Class เอง, Code ภายนอก Class, หรือ Class ลูกที่สืบทอดคุณสมบัติไป

Protected

protected คือ Access Modifier ที่จำกัดการเข้าถึงมากกว่า public Property หรือ Method ที่ถูกกำหนดเป็น protected จะสามารถเข้าถึงได้จาก Code ภายใน Class เอง และจาก Class ลูกที่สืบทอดคุณสมบัติไปเท่านั้น Code ภายนอก Class จะไม่สามารถเข้าถึงได้โดยตรง

Private

private คือ Access Modifier ที่เข้มงวดที่สุด เมื่อ Property หรือ Method ถูกกำหนดเป็น private นั่นหมายความว่า Property หรือ Method นั้นจะสามารถเข้าถึงได้จาก Code ภายใน Class นั้นๆ เท่านั้น แม้แต่ Class ลูกที่สืบทอดคุณสมบัติไปก็ไม่สามารถเข้าถึงได้โดยตรง

การใช้งาน Access Modifiers

เรามาดูตัวอย่างการใช้งาน Access Modifiers ใน PHP กัน

class Car {
    public $color = "Red"; // สามารถเข้าถึงได้จากทุกที่
    protected $engineType = "Gasoline"; // เข้าถึงได้จาก Car และ Class ลูก
    private $model = "Unknown"; // เข้าถึงได้จากภายใน Car เท่านั้น

    public function __construct($model) {
        $this->model = $model;
    }

    public function getModel() {
        return $this->model; // เข้าถึง private property ภายใน class
    }

    protected function startEngine() {
        echo "Engine started. Type: " . $this->engineType . "\n"; // เข้าถึง protected property ภายใน class
    }

    public function drive() {
        $this->startEngine();
        echo "Driving the " . $this->model . ".\n";
    }
}

class ElectricCar extends Car {
    public function __construct($model) {
        parent::__construct($model);
        $this->engineType = "Electric"; // สามารถเข้าถึง protected property
    }

    public function displayEngineType() {
        echo "Engine Type: " . $this->engineType . "\n"; // สามารถเข้าถึง protected property
    }
}

$myCar = new Car("Toyota Camry");
echo "Color: " . $myCar->color . "\n"; // เข้าถึง public property ได้

// echo "Engine Type: " . $myCar->engineType . "\n"; // Error: Cannot access protected property
// echo "Model: " . $myCar->model . "\n"; // Error: Cannot access private property

echo "Model (via method): " . $myCar->getModel() . "\n"; // เข้าถึง private property ผ่าน public method

$myElectricCar = new ElectricCar("Tesla Model S");
$myElectricCar->displayEngineType(); // เข้าถึง protected property ผ่าน method ของ Class ลูก
$myElectricCar->drive();

จากตัวอย่างข้างต้น:

  • $color เป็น public เราจึงสามารถเข้าถึงได้โดยตรงจากภายนอก Class Car
  • $engineType เป็น protected เราจึงไม่สามารถเข้าถึงได้โดยตรงจากภายนอก Class Car แต่สามารถเข้าถึงได้จาก Class ลูก ElectricCar
  • $model เป็น private เราจึงไม่สามารถเข้าถึงได้โดยตรงจากภายนอก Class Car หรือจาก Class ลูก ElectricCar เราสามารถเข้าถึงได้เฉพาะภายใน Class Car เท่านั้น โดยผ่าน Method getModel()

จะเห็นได้ว่า Access Modifiers ช่วยให้เราควบคุมการเข้าถึง Properties และ Methods ได้อย่างละเอียด

ข้อดีของการใช้ Access Modifiers

การใช้ Access Modifiers มีข้อดีหลายประการ:

  • Encapsulation (การห่อหุ้ม): Access Modifiers ช่วยให้เราสามารถซ่อนรายละเอียดภายในของ Class ได้ ทำให้ Code ภายนอก Class ไม่จำเป็นต้องรู้ว่า Class ทำงานอย่างไร เพียงแค่รู้ว่าจะใช้งาน Method อะไรบ้าง
  • Data Integrity (ความสมบูรณ์ของข้อมูล): Access Modifiers ช่วยป้องกันการแก้ไขข้อมูลโดยไม่ได้รับอนุญาต ทำให้มั่นใจได้ว่าข้อมูลภายใน Object จะอยู่ในสถานะที่ถูกต้องเสมอ
  • Code Maintainability (ความสามารถในการบำรุงรักษา Code): Access Modifiers ทำให้ Code ของเรามีความยืดหยุ่นและง่ายต่อการเปลี่ยนแปลง เมื่อมีการเปลี่ยนแปลงภายใน Class เราไม่ต้องกังวลว่า Code ภายนอก Class จะได้รับผลกระทบ เพราะ Code ภายนอก Class จะเข้าถึงได้เฉพาะ Properties และ Methods ที่เป็น public เท่านั้น
  • Abstraction (การนามธรรม): Access Modifiers ช่วยให้เราสามารถสร้าง Abstraction ได้ โดยการซ่อนรายละเอียดการ Implement ที่ซับซ้อน และแสดงเฉพาะ Interface ที่จำเป็นต่อการใช้งาน

สรุป: Access Modifiers เป็นเครื่องมือสำคัญในการเขียนโปรแกรมเชิงวัตถุ (OOP) ที่ดี การใช้ Access Modifiers อย่างถูกต้องจะช่วยให้ Code ของเรามีความปลอดภัย, maintainable และเข้าใจง่ายมากยิ่งขึ้น ในบทความถัดไป เราจะเจาะลึก Access Modifier แต่ละประเภท (Public, Private, Protected) ให้ละเอียดมากยิ่งขึ้น

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る