การประกาศค่าคงที่(Constant)ใน PHP
ค่าคงที่จะแตกต่างจากตัวแปรตรงที่เมื่อประกาศแล้วจะไม่สามารถเปลี่ยนแปลงค่าได้ เราจะใช้ค่าคงที่เมื่อเราอ้างอิงถึงค่าที่ไม่มีการเปลี่ยนแปลง เช่น ID ของ Master data ใน database เช่น Order status แทนที่เราจะใส่ใน Code เป็น 1,2,3 เราจะประกาศ constant ขึ้นมาเป็น ORDERED, PAID, COMPLETED แทน Code จะเปลี่ยนจาก
เรานิยมใช้ Constant เป็นตัวพิมพิ์ใหญ่เพื่อให้ง่ายต่อการอ่าน
|
|
ไปเป็น
|
|
การประกาศ constant ใน PHP จะมีข้อกำหนดดังนี้่
- Constant จะเป็นเหมือนกับตัวแปรทั่วไปแต่จะไม่สามารถเปลี่ยนแปลงค่าได้
- Constant จะต้องนำหน้าด้วยตัวอักษร หรือ underscore(_) เท่านั้น
- ไม่จำเป็นต้องมีเครื่องหมาย $ นำหน้า
- ค่าคงที่จะอยู่ใน Global Scope โดยอัตโนมัติ
การกำหนดค่า Constant
การกำหนดค่า Constant จะมีอยู่ 2 วิธีคือ
การใช้ function define()
define() จะมี parameters อยู่ 3 ตัวด้วยกันคือ
- ชื่อ Constant
- ค่าของ Constant
- ต้องการให้ชื่อเป็น Case-insensitive (ตัวอักษรตัวใหญ่หรือตัวเล็กไม่ต่างกัน) โดย default จะเป็น FALSE
define("PI", 3.14159);
echo PI;
ถ้าต้องการให้เรียกใช้ค่าคงที่(Constant) แบบ Case-insensitive ด้วยการกำหนด Parameter ตัวที่ 3 เป็น TRUE
define("PI", 3.14159, true);
echo pi; // เราสามารถใช้ pi หรือ PI ก็ได้
Const Keyword
เราอาจเลือกใช้ const แทน define() ได้ ซึ่งความแตกต่างของ define() และ const คือ define จะเรียกใช้งานในรูปแบบของ function เหมือนในตัวอย่างก่อนหน้า แต่ const จะเป็น keyword ที่นำไปวางหน้าตัวแปรแบบนี้
const PI = 3.14159;
echo PI;
นอกจากการเขียนที่ไม่เหมือนกันแล้ว const เป็นค่าคงที่ ที่อยู่ใน local scope ส่วน define เป็นการประกาศค่าคงที่ใน global scope ซึ่งจะทำให้ const ถูกนำไปใช้ใน class ได้ แต่ define จะไปวางไว้ใน class ไม่ได้
|
|
ใน class เราจะประกาศตัวแปร CONSTANT ขึ้นมาในบรรทัดที่ 3 และนำไปใช้ใน function showConstant(บรรทัดที่ 6) จุดสังเกตคือเราต้องนำหน้าด้วย keyword self:: เพราะเมื่อประกาศค่าคงที่จะเป็นตัวแปรในระดับของ class(ทุกๆ object ที่สร้างจาก class นี้จะอ้างถึงตัวแปรเดียวกัน)
ถ้าเรียกใช้งานจาก class อื่นๆให้ใช้ชื่อ class นำหน้าแบบนี้
class Account{
const VAT = 0.07;
}
$price = 1200;
echo $price + ($price * Account::VAT). "<br/>";
ถ้ามี namespace เราต้องแน่ใจว่า คำสั่งที่เราเรียกใช้งานนั้นอยู่ใน namespace เดียวกันแบบนี้
|
|
ถ้าเรียกใช้นอก namespace นี้จะต้องใช้ foo\bar แทน
Constant อาจไม่สามารถเปลี่ยนแปลงค่าหลังจากประกาศไปแล้ว แต่สามารถที่จะใส่ expression เข้าไปได้ หมายความว่าค่าคงที่อาจมาจากการคำนวนได้ เช่น
|
|
นอกจากนี้แล้ว constant ยังสามารถใส่ access modifier(public หรือ private) เข้าไปได้ด้วย เช่น
|
|