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 วิธีหลักๆ:
- ภายใน Class: ใช้ Keyword
self::ตามด้วยชื่อของ Constant - ภายนอก 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 อัตโนมัติเมื่อต้องการใช้งาน