บทนำ
PHP อนุญาตให้กำหนด Constant ภายในคลาสที่มีค่าคงที่ ไม่เปลี่ยนแตกต่างจาก Variable/Property ชื่อ Constant ไม่ขึ้นต้นด้วย $ และกำหนดด้วยคีย์เวิร์ด const
Default Visibility คือ public (PHP 7.1+ รองรับ private/protected) ค่าต้องเป็น Expression แบบคงที่ (ไม่ใช่ Variable, Function Call, Property) เข้าถึงผ่าน Class Name ด้วย Scope Resolution Operator (::) ภายในเมธอดใช้ self::CONSTANT_NAME
Syntax
class SomeClass {
const CONSTANT = 'constant value';
}
echo SomeClass::CONSTANT;
Constant Names เป็น Case-sensitive แต่อนุบัติมักใช้ Uppercase
ตัวอย่าง Class Constant พื้นฐาน
<?php
class square {
const PI = M_PI;
var $side = 5;
function area() {
$area = $this->side ** 2 * self::PI;
return $area;
}
}
$s1 = new square();
echo "PI=" . square::PI . "\n";
echo "area=" . $s1->area();
?>
ผลลัพธ์
PI=3.1415926535898 area=78.539816339745
Class Constant เป็น Expression
สามารถกำหนด Expression ได้ (PHP 5.6+):
<?php
const X = 22;
const Y = 7;
class square {
const PI = X / Y; // Expression
var $side = 5;
function area() {
$area = $this->side ** 2 * self::PI;
return $area;
}
}
$s1 = new square();
echo "PI=" . square::PI . "\n";
echo "area=" . $s1->area();
?>
ผลลัพธ์
PI=3.1428571428571 area=78.571428571429
Constant Visibility Modifiers (PHP 7.1+)
<?php
class example {
const X = 10; // public (default)
private const Y = 20; // private
protected const Z = 30; // protected
}
echo "public=" . example::X . "\n";
// echo example::Y; // Fatal Error: Cannot access private const
?>
ผลลัพธ์
public=10 PHP Fatal error: Uncaught Error: Cannot access private const example::Y
การใช้งาน Constant ใน Class
- ภายนอกคลาส:
ClassName::CONSTANT - ภายในคลาส:
self::CONSTANTหรือstatic::CONSTANT(Late Static Binding) - ใน Child Class:
parent::CONSTANTหรือself::CONSTANT
ข้อจำกัด
- ค่าต้องเป็น Scalar หรือ Array (PHP 5.6+) หรือ Expression ที่คำนวณได้ที่ Compile Time
- ไม่สามารถใช้ Variable, Function Call, Property, Method Call ได้
- ไม่สามารถ Override ได้ใน Child Class (Constants ไม่ใช่ Properties)