Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

Class Constants ใน PHP

บทนำ

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)