จำนวนการเปิดอ่าน 90
คะแนนเอกสาร

ค่าคงที่ หรือ Constant นั้น ตามตำราบอกว่า คือมันคงที่ จะเปลี่ยนแปลงมันไม่ได้ เอาไว้กำหนดนค่าอะไรซักอย่างที่มันไม่ต้องการเปลี่ยนอะไรเลย (ไม่เหมือนตัวแปล)

แต่จริงๆ แล้วเราสามารถเปลี่ยนมันได้ครับ ดังตัวอย่างแบบนี้

class A {
    const CONST_A = 10;
}

class B extends A {
    const CONST_A = 20;

    public function printConst() {
        echo self::CONST_A;
    }
}

ซึ่งถ้าเราสั่ง printConst  ออกมาจาก Class B มันก็จะได้ผลลัพธ์ 20 ออกมานั่นเอง

แต่ถ้าคำสั่งแสดงผล อยู่ใน Class A แบบนี้ล่ะ

class A {
    const CONST_A = 10;

    public function printConst() {
        echo self::CONST_A;
    }
}

class B extends A {
    const CONST_A = 20;
}

ถ้าแบบนี้ ถ้าจะ new B() ออกมา ผลที่ได้ก็จะยังเป็น 10 อยู่ดีครับ

วิธีแก้ง่ายๆ คือ เปลี่ยนจาก self:: เป็น static:: แทน เท่านั้นเอง ดังตัวอย่างเต็มๆ ข้างล่างนี้ครับ

class A {
    const CONST_A = 10;

    public function printConst() {
        echo static::CONST_A;
    }
}

class B extends A {
    const CONST_A = 20;
}

$b = new A();
$b->printConst();   // <=== 10

$b = new B();
$b->printConst();   // <=== 20

จบ~~