Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

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

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service