본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

Constant: การกำหนดค่าคงที่ใน Class

บทความนี้อธิบายถึงการใช้ `constant` ใน Class ของ PHP เพื่อกำหนดค่าคงที่ที่ไม่สามารถเปลี่ยนแปลงได้ ทำให้โค้ดปลอดภัย อ่านง่าย และชัดเจนขึ้น โดยการประกาศใช้ `const...

Constant: การกำหนดค่าคงที่ใน Class

ในบทเรียนนี้ เราจะมาเรียนรู้เรื่อง Constant หรือค่าคงที่ใน Class ของ PHP ซึ่งเป็นส่วนสำคัญในการกำหนดค่าที่ไม่เปลี่ยนแปลงภายใน Class ของเรา Constant ช่วยให้เรามั่นใจได้ว่าค่าบางอย่างจะไม่ถูกแก้ไขโดยไม่ได้ตั้งใจ และยังทำให้โค้ดของเราอ่านง่ายและเข้าใจได้มากขึ้น

ความหมายของ Constant

Constant ในบริบทของ Class คือค่าที่ถูกกำหนดไว้ตั้งแต่แรกและไม่สามารถเปลี่ยนแปลงได้ตลอดอายุการทำงานของโปรแกรม (ภายใน Class นั้นๆ) มันคล้ายกับตัวแปร (variable) แต่แตกต่างกันตรงที่ตัวแปรสามารถเปลี่ยนค่าได้ตลอดเวลา แต่ Constant ไม่สามารถทำได้

ทำไมต้องใช้ Constant?

  • ความปลอดภัย: ป้องกันการแก้ไขค่าที่สำคัญโดยไม่ได้ตั้งใจ
  • ความชัดเจน: บอกให้รู้ว่าค่านี้เป็นค่าคงที่และไม่ควรเปลี่ยนแปลง
  • Code Readability: ทำให้โค้ดอ่านง่ายและเข้าใจได้มากขึ้น

การประกาศ Constant

ในการประกาศ Constant ใน Class ของ PHP เราจะใช้ Keyword const ตามด้วยชื่อของ Constant และค่าที่ต้องการกำหนด

class MyClass {
    const MY_CONSTANT = "This is a constant value.";
}

ข้อควรรู้:

  • ชื่อของ Constant มักจะเขียนด้วยตัวพิมพ์ใหญ่ทั้งหมด (Convention) เพื่อให้เห็นได้ชัดเจนว่าเป็นค่าคงที่
  • Constant สามารถมีได้หลายประเภท เช่น string, integer, float, boolean

ตัวอย่างเพิ่มเติม:

class DatabaseConfig {
    const HOST = "localhost";
    const USERNAME = "root";
    const PASSWORD = "password123";
    const DATABASE_NAME = "my_database";
}

การเข้าถึง Constant

การเข้าถึง Constant ใน Class สามารถทำได้ 2 วิธีหลักๆ:

  1. ภายใน Class: ใช้ Keyword self:: ตามด้วยชื่อของ Constant
  2. ภายนอก Class: ใช้ชื่อ Class ตามด้วย :: และชื่อของ Constant

ตัวอย่างการเข้าถึง Constant ภายใน Class:

class MyClass {
    const MY_CONSTANT = "This is a constant value.";

    public function displayConstant() {
        echo "The constant value is: " . self::MY_CONSTANT . "<br>";
    }
}

$obj = new MyClass();
$obj->displayConstant(); // Output: The constant value is: This is a constant value.

ตัวอย่างการเข้าถึง Constant ภายนอก Class:

class MyClass {
    const MY_CONSTANT = "This is a constant value.";
}

echo "The constant value is: " . MyClass::MY_CONSTANT . "<br>"; // Output: The constant value is: This is a constant value.

ข้อสังเกต: ในการเข้าถึง Constant ภายนอก Class เราไม่ต้องสร้าง Object ของ Class นั้นๆ เราสามารถเข้าถึงได้โดยตรงผ่านชื่อ Class

กรณีใช้งานจริง

1. กำหนดค่าคงที่สำหรับสถานะ (Status):

สมมติว่าเรากำลังสร้างระบบจัดการ Order เราสามารถกำหนด Constant สำหรับสถานะต่างๆ ของ Order ได้

class Order {
    const STATUS_PENDING = "pending";
    const STATUS_PROCESSING = "processing";
    const STATUS_SHIPPED = "shipped";
    const STATUS_DELIVERED = "delivered";
    const STATUS_CANCELLED = "cancelled";

    private $status;

    public function __construct() {
        $this->status = self::STATUS_PENDING; // ตั้งค่าเริ่มต้นเป็น pending
    }

    public function setStatus($newStatus) {
        // ตรวจสอบว่าสถานะใหม่ถูกต้องหรือไม่
        if (in_array($newStatus, [self::STATUS_PENDING, self::STATUS_PROCESSING, self::STATUS_SHIPPED, self::STATUS_DELIVERED, self::STATUS_CANCELLED])) {
            $this->status = $newStatus;
        } else {
            echo "Invalid status.<br>";
        }
    }

    public function getStatus() {
        return $this->status;
    }
}

$order = new Order();
echo "Initial status: " . $order->getStatus() . "<br>"; // Output: Initial status: pending

$order->setStatus(Order::STATUS_SHIPPED);
echo "Updated status: " . $order->getStatus() . "<br>"; // Output: Updated status: shipped

$order->setStatus("invalid_status"); // Output: Invalid status.

2. กำหนดค่าคงที่สำหรับ Error Codes:

ในการจัดการ Error เราสามารถกำหนด Constant สำหรับ Error Codes ต่างๆ เพื่อให้ง่ายต่อการอ้างอิงและจัดการ

class ErrorCodes {
    const ERROR_INVALID_INPUT = 1001;
    const ERROR_DATABASE_CONNECTION = 2001;
    const ERROR_FILE_NOT_FOUND = 3001;
}

function processData($data) {
    if (empty($data)) {
        return ErrorCodes::ERROR_INVALID_INPUT;
    }

    // ... processing logic ...

    return true; // Success
}

$result = processData("");
if ($result === ErrorCodes::ERROR_INVALID_INPUT) {
    echo "Error: Invalid input.<br>";
} else {
    echo "Data processed successfully.<br>";
}

ข้อผิดพลาดที่พบบ่อย

1. พยายามแก้ไข Constant:

Constant ไม่สามารถแก้ไขได้ หากพยายามแก้ไข จะเกิด Error

class MyClass {
    const MY_CONSTANT = "Initial value";
}

MyClass::MY_CONSTANT = "New value"; // Fatal error: Cannot re-assign class constant MyClass::MY_CONSTANT

2. ใช้ $ นำหน้า Constant:

Constant ไม่ใช่ตัวแปร ดังนั้นไม่ต้องมี $ นำหน้า

class MyClass {
    const MY_CONSTANT = "Value";
}

echo $MyClass::MY_CONSTANT; // Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING or T_NS_SEPARATOR

3. การตั้งชื่อ Constant ที่ไม่สื่อความหมาย:

ควรตั้งชื่อ Constant ให้สื่อความหมายและชัดเจน เพื่อให้เข้าใจได้ง่ายว่า Constant นั้นมีไว้ทำอะไร

สรุป

Constant เป็นเครื่องมือที่มีประโยชน์ในการกำหนดค่าคงที่ใน Class ของ PHP ช่วยให้โค้ดมีความปลอดภัย ชัดเจน และอ่านง่ายขึ้น การใช้ Constant อย่างถูกต้องจะช่วยให้เราเขียนโค้ด OOP ที่มีคุณภาพและง่ายต่อการบำรุงรักษามากยิ่งขึ้น ในบทต่อไป เราจะมาเรียนรู้เรื่อง Autoloading ซึ่งเป็นกลไกที่ช่วยให้เราโหลด Class อัตโนมัติเมื่อต้องการใช้งาน

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기