Constants & 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): boolParamiter ของฟังก์ชัน
$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 ค่าคงที่ถูกกำหนดด้วย
finalkeyword ซึ่งทำให้ค่าของตัวแปรไม่สามารถเปลี่ยนแปลงได้หลังจากการกำหนดค่า
สรุปการใช้งาน constants ในแต่ละภาษา
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.asp
W3Schools. (n.d.). PHP magic constants. W3Schools. Retrieved October 14, 2024, from https://www.w3schools.com/php/php_magic_constants.asp
TutorialsPoint. (n.d.). PHP constants. TutorialsPoint. Retrieved October 14, 2024, from https://www.tutorialspoint.com/php/php_constants.htm
TutorialsPoint. (n.d.). PHP magic constants. TutorialsPoint. Retrieved October 14, 2024, from https://www.tutorialspoint.com/php/php_magic_constants.htm
Javatpoint. (n.d.). PHP magic constants. Javatpoint. Retrieved October 14, 2024, from https://www.javatpoint.com/php-magic-constants
Tutorial Republic. (n.d.). PHP magic constants. Tutorial Republic. Retrieved October 14, 2024, from https://www.tutorialrepublic.com/php-tutorial/php-magic-constants.php
Last updated