circle-heartConstants & Magic Constants

ฐานะรัฐ น้อยเมือง 630710037

Constants

constanst คืออะไรในPHP คือ ชื่อหรือตัวระบุที่ใช้แทนค่าคงที่ ซึ่งค่านั้นจะไม่สามารเปลี่ยนแปลงได้ ซึ่งจะถูกกำหนดขึ้นเมื่อเริ่มต้นการทำงานของสคริปต์ และตลอดการทำงานค่าก็จะไม่สามารถเปลี่ยนแปลงได้ตลอดการทำงานของโปรแกรม

หลักการเขียนConstants

  • การเขียนตัวพิมพ์เล็กและพิมพ์ใหญ่ในPHPจะเเยกแยะหว่างกัน(case-sensitive)ไม่มองว่าเป็นตัวเดียวกัน เช่น CAT และ cat

  • ตามหลักของ PHP คอนสแตนต์จะถูกตั้งชื่อป็นพิมพ์ใหญ่ทั้งหมด เช่น MAX_VALUE ให้ดูแตกต่างจากตัวแปร

  • ชื่อconstants จะต้องเริ่มด้วยตัวอักษรหรือขีดล่าง ตามด้วยตัวอักษรตัวเลขหรือขีดล่าง(_)

  • ไม่ต้องใช้เครื่องหมาย$เหมือนการใช้ตัวแปร

การกำหนด Named Constant

ฟังก์ชัน define() ใน PHP ใช้สำหรับการกำหนดค่าคงที่ (named constant) ในระหว่างการทำงานของโปรแกรม (runtime)

รูปแบบฟังก์ชัน define()

define(string $const_name, mixed $value, bool $case = false): bool

Paramiter ของฟังก์ชัน

  • $const_name-ชื่อของค่าคงที่

  • $value-เป็นค่าคงที่สามารถเป็นประเภท scalar (เช่น int, float, string, bool, หรือ null) หรือสามารถเป็น array ก็ได้

  • $case-เป็นประเภท bool ถ้ากำหนดค่าtrue

ผลลัพธ์ที่ได้

  • ฟังก์ชัน define() จะคืนค่าเป็น true ถ้าการกำหนดค่าคงที่สำเร็จ

  • คืนค่า false หากการกำหนดค่าคงที่ล้มเหลว

ตัวอย่างการนำไปใช้

การใช้ define()

ตัวอย่างนี้จะแสดงให้เห็นว่า define() ฟังก์ชันทำงานอย่างไร โดยกำหนดค่า constants

output

คำสั่ง CONSTANT;

ยกเลิกคำสั่ง echo CONSTANT;

กำหนดพารามิเตอร์ case เป็น false ใน define()

การใช้ Array เป็นค่า Constant

ใน PHP เราจะสามารถใช้ define() เพื่อที่จะกำหนดค่า constant ที่เป็น array ได้

output

การใช้ฟังก์ชัน constant()

ฟังก์ชัน constant() ใน PHP สามารถใช้เพื่อดึงค่าของ constant ที่กำหนดไว้ โดยที่เราสามารถให้ชื่อของ constant เป็นสตริงที่เก็บไว้ในตัวแปรได้

output

การใช้ฟังก์ชัน defined()

ฟังก์ชัน defined() ใช้เพื่อเช็กว่าค่าคงที่ (constant) ที่เราต้องการใช้งานนั้นได้ถูกกำหนดไว้หรือไม่ หากยังไม่ได้กำหนดจะส่งค่า false กลับมา

ฟังก์ชัน get_defined_constants()

ฟังก์ชัน get_defined_constants() จะคืนค่าเป็นอาเรย์ที่ประกอบไปด้วยชื่อของ constant และค่าของมันทั้งหมดที่ถูกกำหนดในโปรแกรมปัจจุบัน

output

สรุปการใช้ Constant

  • define() ใช้เพื่อกำหนดค่าคงที่ (constant) ที่สามารถใช้งานได้ในระหว่างการทำงานของโปรแกรม (runtime)

  • constant() ใช้เพื่อดึงค่าของ constant โดยที่ชื่อ constant ถูกเก็บไว้ในตัวแปร

  • defined() ใช้เพื่อตรวจสอบว่าค่าคงที่ (constant) ที่ต้องการใช้งานนั้นได้ถูกกำหนดหรือยัง

  • get_defined_constants() ใช้เพื่อดึงรายชื่อและค่าของค่าคงที่ทั้งหมดที่ได้ถูกกำหนดในโปรแกรม

Code การใช้ Constans ในแต่ละภาษา

การใช้ define() (Global constant)

Python ไม่มีการบังคับให้ค่าคงที่ไม่สามารถเปลี่ยนแปลงได้ (ต่างจาก C, Java หรือ PHP) แต่ใช้ convention (ตัวพิมพ์ใหญ่) เพื่อบ่งบอกว่าค่าคงที่ไม่ควรถูกเปลี่ยนแปลง

การใช้ const (Class constant)

  • ใน PHP เราสามารถใช้ฟังก์ชัน define() สำหรับการประกาศ constants ในระดับ global หรือใช้ const สำหรับการประกาศ constants ภายในคลาส

  • ใน C เราสามารถใช้ #define (preprocessor directive) หรือ const สำหรับการประกาศ constants

  • ใน Java ค่าคงที่ถูกกำหนดด้วย final keyword ซึ่งทำให้ค่าของตัวแปรไม่สามารถเปลี่ยนแปลงได้หลังจากการกำหนดค่า

สรุปการใช้งาน constants ในแต่ละภาษา

ภาษา
การประกาศconstant
ตัวอย่างโค้ด

PHP

define() หรือ const

define("PI", 3.14159); หรือ const PI = 3.14159;

C

#define หรือ const

#define PI 3.14159 หรือ const double PI = 3.14159;

Java

final

public static final double PI = 3.14159;

Python

ไม่มีคีเวิร์ดเฉพาะสำหรับ constant

PI = 3.14159 (ใช้ convention ตัวพิมพ์ใหญ่)

Magic Constants

Magic Constants นั่นก็คือ ค่าคงที่ที่ถูกกำหนดไว้ล่วงหน้าในภาษา PHP ซึ่งมีการใช้งานเฉพาะในบางสถานการณ์และจะถูกประมวลผล ในระหว่างการคอมไพล์ (compile time) ไม่ใช่ในระหว่างการทำงาน (runtime) เหมือนกับ regular constants ที่เราประกาศเอง โดยที่ค่าของ Magic Constants จะเปลี่ยนแปลงไปตามตำแหน่งที่มันถูกใช้งานในโค้ด

Magic Constant เหล่านี้ทั้งหมดเป็น case-insensitive หมายความว่า ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กจะถูกมองเป็นค่าเดียวกัน

ตัวอย่างการใช้งานMagic Constants

1.__CLASS__

หากใช้ภายในคลาสชื่อคลาสจะถูกส่งกลับ

out put ของโค้ดนี้คือ Fruits ซึ่งเป็นชื่อของคลาสที่เมธอด myValue() อยู่ โดยใช้ Magic Constant __CLASS__ ที่ช่วยให้สามารถดึงชื่อของคลาสได้ภายในเมธอด.

2.__DIR__

ค่านี้จะคืนค่าเส้นทางของไดเรกทอรีที่ไฟล์ปัจจุบันตั้งอยู่

out put ของโค้ดนี้คือ C:\awesomesites\w3schools\php ซึ่งเป็นเส้นทาง (path) ที่ไฟล์ PHP นั้นถูกเก็บอยู่บนเครื่องหรือเซิร์ฟเวอร์ของเรา

3.__FILE__

แสดงชื่อไฟล์ที่กำลังทำงานรวมกับเส้นทางทั้งหมดไปยังตำแหน่งที่ไฟล์ถูกจัดเก็บ

out put ของโค้ดนี้คือ C:\awesomesites\w3schools\php\magic_const_file.php แสดงถึง ชื่อไฟล์รวมถึงเส้นทางแบบเต็ม (full path) ของไฟล์ PHP ที่ชื่อ magic_const_file.php ซึ่งถูกเก็บอยู่ในไดเรกทอรีตามลำดับโฟลเดอร์

4.__FUNCTION__

คืนค่าชื่อของฟังก์ชันที่กำลังเรียกใช้อยู่ในบริบทที่ฟังก์ชันนั้นถูกเรียก

out put ของโค้ดนี้คือ myValue ฟังก์ชัน myValue() ถูกเรียกใช้และคืนค่าชื่อฟังก์ชันของมันเองโดยใช้ __FUNCTION__ และในกรณีนี้คือ "myValue"

5.__LINE__

จะใช้เพื่อเพื่อคืนค่าหมายเลขบรรทัดปัจจุบันในไฟล์ PHP นั้นๆ ซึ่งเป็นประโยชน์มากเมื่อทำการดีบั๊กหรือการตรวจสอบโค้ด

out put ของโค้ดนี้คือ 6

6.__METHOD__

ใช้เพื่อคืนค่าชื่อของเมธอด (method) ที่กำลังทำงานอยู่ รวมถึงชื่อคลาสถ้ามีการใช้งานภายในคลาส

out put ของโค้ดนี้คือ Fruits::myValue และ__METHOD__ จะคืนค่าชื่อคลาสตามด้วยชื่อเมธอดที่เรียกใช้งาน คือ "MyClass::myMethod"

7.__NAMESPACE__

ใช้เพื่อคืนค่าชื่อของ namespace ปัจจุบันที่โค้ดนั้นถูกเขียนหรือทำงานอยู่ มีประโยชน์ในการจัดการฟังก์ชัน, คลาส, และตัวแปรต่าง ๆ เมื่อคุณต้องการหลีกเลี่ยงการเกิดชื่อซ้ำ (name collisions) ในโปรเจกต์ขนาดใหญ่

out put ของโค้ดนี้คือ myArea ซึ่งจะแสดงให้เห็นถึงการใช้งานของ namespace ใน PHP

8.__TRAIT__

ใช้เพื่อคืนค่าชื่อของ ปัจจุบันที่โค้ดกำลังทำงานอยู่ในขณะนั้น โดยเฉพาะเมื่อใช้ภายใน trait เพื่อให้สามารถระบุชื่อ trait ได้อย่างชัดเจน

out put ของโค้ดนี้คือ message1 และจะสร้างtrait message1 ที่มีเมธอด msg1 ซึ่งใช้ TRAIT เพื่อคืนค่าชื่อของ trait คลาส Welcome ใช้ trait message1 และเมื่อเรียกใช้เมธอด msg1 จะคืนค่าชื่อ trait ซึ่งแสดงผลเป็น "message1" บนหน้าเว็บ

9.ClassName::class

ใช้เพื่อคืนค่าชื่อของคลาสในรูปแบบ string ซึ่งช่วยให้การจัดการชื่อคลาสในโค้ดมีความชัดเจนและสะดวกขึ้น

out put ของโค้ดนี้คือ myArea\Fruits เเละจากโค้ดจะสร้างคลาส Fruits ที่มีเมธอด myValue ซึ่งใช้ Fruits::class เพื่อคืนค่าชื่อของคลาส เมื่อเรียกใช้เมธอด myValue จะคืนค่าชื่อคลาสในรูปแบบ "myArea\Fruits" และแสดงผลบนหน้าเว็บ

ข้อดีของการใช้ Magic Constants

  • ความสะดวกสบาย: ไม่จำเป็นต้องกำหนดค่าให้กับตัวแปรเอง ลดความผิดพลาดในการพิมพ์ชื่อ

  • การตรวจสอบ: ใช้ในการดีบั๊กและตรวจสอบว่าฟังก์ชันหรือคลาสไหนถูกเรียกใช้งาน

  • การบำรุงรักษา: ช่วยให้โค้ดมีความยืดหยุ่นและง่ายต่อการบำรุงรักษา โดยเฉพาะในโปรเจกต์ขนาดใหญ่

Code การใช้ Magic Constants ในเเต่ละภาษา

-ใน PHP มีการใช้ magic constants ที่เป็นค่าคงที่ที่กำหนดไว้ล่วงหน้า

-Java ไม่มี magic constants ที่ตรงตาม PHP แต่สามารถใช้ StackTrace เพื่อรับข้อมูลที่เกี่ยวกับตำแหน่งในโค้ดได้

- ใน C สามารถใช้ macros เพื่อสร้างค่าคงที่ที่คล้ายคลึงกับ magic constants

- Python ไม่มี magic constants ที่ตรงตามแบบ PHP แต่สามารถใช้ inspect module เพื่อดึงข้อมูลเกี่ยวกับตำแหน่งในโค้ด

สรุปและเปรียบเทียบการใช้

ภาษา
ค่าคงที่
วิธีการใช้งาน

PHP

__LINE__,__ FILE__,__ DIR__

ใช้งานง่ายและตรงไปตรงมา

C

ไม่มี magic constants โดยตรง

ใช้ StackTrace เพื่อรับข้อมูลเกี่ยวกับตำแหน่งในโค้ด

Java

__LINE__,__ FILE__

ใช้ macros เพื่อแสดงหมายเลขบรรทัดและชื่อไฟล์

Python

ไม่มี magic constants โดยตรง

ใช้ inspect module เพื่อรับข้อมูลเกี่ยวกับตำแหน่งในโค้ด

  • Magic constants ใน PHP และ C มีลักษณะเฉพาะที่สามารถใช้ได้โดยตรงในโค้ด แต่ใน Java และ Python ต้องใช้วิธีอื่นเพื่อให้ได้ข้อมูลที่คล้ายกัน

  • ในภาษา Java และ Python แม้จะไม่มี magic constants แต่การเข้าถึงข้อมูลเกี่ยวกับตำแหน่งในโค้ดก็ยังสามารถทำได้ด้วยการใช้คลาสต่าง ๆ หรือ module ต่าง ๆ

Slide

Video

Reference

W3Schools. (n.d.). PHP constants. W3Schools. Retrieved October 14, 2024, from https://www.w3schools.com/php/php_constants.asparrow-up-right

W3Schools. (n.d.). PHP magic constants. W3Schools. Retrieved October 14, 2024, from https://www.w3schools.com/php/php_magic_constants.asparrow-up-right

TutorialsPoint. (n.d.). PHP constants. TutorialsPoint. Retrieved October 14, 2024, from https://www.tutorialspoint.com/php/php_constants.htmarrow-up-right

TutorialsPoint. (n.d.). PHP magic constants. TutorialsPoint. Retrieved October 14, 2024, from https://www.tutorialspoint.com/php/php_magic_constants.htmarrow-up-right

Javatpoint. (n.d.). PHP magic constants. Javatpoint. Retrieved October 14, 2024, from https://www.javatpoint.com/php-magic-constantsarrow-up-right

Tutorial Republic. (n.d.). PHP magic constants. Tutorial Republic. Retrieved October 14, 2024, from https://www.tutorialrepublic.com/php-tutorial/php-magic-constants.phparrow-up-right

Last updated