วันอาทิตย์ที่ 16 กุมภาพันธ์ พ.ศ. 2568

[PHP] การใช้ Static ใน PHP แบบเข้าใจง่าย

ถ้าเคยเขียนโปรแกรม OOP ใน PHP มาก่อน คงเคยเห็นหรือได้ยินคำว่า static ใช่ไหม? แต่ static มันคืออะไร และใช้ยังไง? วันนี้เรามาดูกันแบบเข้าใจง่าย ๆ กันเลย!

Static คืออะไร?

static เป็นคีย์เวิร์ดที่ใช้กำหนดว่า ตัวแปรหรือเมทอดในคลาสสามารถเรียกใช้ได้โดยไม่ต้องสร้างอ็อบเจกต์ (Object) ซึ่งต่างจากปกติที่ต้อง new ก่อน

ง่าย ๆ ก็คือ มันเป็นของ คลาส ไม่ใช่ของ อ็อบเจกต์ นั่นเอง

ตัวอย่างการใช้ Static

<?php
class MathHelper {
    public static $pi = 3.14159;

    public static function square($number) {
        return $number * $number;
    }
}

// เรียกใช้ static property
echo MathHelper::$pi; // แสดงค่า 3.14159

// เรียกใช้ static method
echo MathHelper::square(4); // แสดงค่า 16
?>

อธิบายโค้ดง่าย ๆ

  • public static $pi เป็นตัวแปรที่สามารถเรียกใช้ได้โดยตรงจากชื่อคลาส MathHelper::$pi
  • public static function square($number) เป็นฟังก์ชันที่สามารถเรียกใช้ได้โดยตรงจากคลาส MathHelper::square(4)

เปรียบเทียบ Static กับ Non-Static

ปกติแล้ว ถ้าเราไม่ใช้ static เราต้องสร้างอ็อบเจกต์ก่อนถึงจะใช้งานได้

<?php
class MathHelper {
    public $pi = 3.14159;
    public function square($number) {
        return $number * $number;
    }
}

$math = new MathHelper();
echo $math->pi; // ต้องเรียกใช้ผ่านอ็อบเจกต์
?>

แต่ถ้าใช้ static เราก็เรียกได้เลยโดยไม่ต้อง new

Static กับ self:: และ parent::

เมื่ออยู่ในคลาสเดียวกัน ถ้าจะอ้างถึงตัวแปรหรือเมทอดที่เป็น static เราจะใช้ self::

<?php
class Test {
    public static function hello() {
        return "Hello, Static!";
    }
    public static function callHello() {
        return self::hello(); // ใช้ self:: เรียกเมทอด static
    }
}

echo Test::callHello(); // แสดงผล "Hello, Static!"
?>

ถ้ามีการสืบทอด (extends) และต้องการอ้างถึงของคลาสแม่ ให้ใช้ parent::

<?php
class ParentClass {
    public static function sayHi() {
        return "Hi from Parent!";
    }
}

class ChildClass extends ParentClass {
    public static function greet() {
        return parent::sayHi(); // ใช้ parent:: อ้างถึงของคลาสแม่
    }
}

echo ChildClass::greet(); // แสดงผล "Hi from Parent!"
?>

เมื่อไหร่ควรใช้ Static?

  • เมื่อไม่ต้องการสร้างอ็อบเจกต์ แต่อยากเรียกใช้ข้อมูลหรือฟังก์ชันจากคลาส
  • เมื่อต้องการสร้าง Helper Class ที่มีแต่ฟังก์ชันช่วยเหลือต่าง ๆ
  • เมื่อต้องการเก็บค่าคงที่หรือค่าที่ใช้ร่วมกันทั่วโปรแกรม


สรุป

  • static ใช้กับตัวแปรและเมทอดในคลาสที่ต้องการเรียกใช้โดยไม่ต้องสร้างอ็อบเจกต์
  • ใช้ self:: ในคลาสเดียวกัน และ parent:: ถ้าเรียกจากคลาสลูก
  • มีประโยชน์มากกับ Helper Functions หรือค่าคงที่ที่ใช้ร่วมกันทั่วโปรแกรม


ทีนี้ก็รู้แล้วว่า static มีไว้ทำอะไร! ลองนำไปใช้ดูนะ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น