Web Development
PHP: Magic constants 🪄
ในบทความนี้จะเป็นการแนะนำ Magic constants ในภาษา PHP ที่เราสามารถเรียกใช้งานได้เลย

__LINE__
เมื่อเรียกใช้งานจะ return ค่าเป็นชื่อหมายเลขบรรทัดของไฟล์ที่ใช้งาน

<?php
echo 'This is line ' . __LINE__; // This is line 2
__FILE__
เมื่อใช้งาน จะ return ค่าเป็นชื่อเป็น path ของไฟล์ที่ใช้งาน รวมถึงชื่อไฟล์ด้วย

<?php
echo 'This is file ' . __FILE__; // This is file /home/user/scripts/code.php
__DIR__
จะเหมือนกับ __FILE__
แต่จะ return ค่าเป็นชื่อเฉพาะ path ของไดเร็กทอรีที่ใช้งาน

<?php
echo 'This is dir ' . __DIR__; // This is dir /home/user/scripts
__FUNCTION__
เมื่อใช้ในฟังก์ชัน จะ return ค่าเป็นชื่อของฟังก์ชันนั้นๆ

<?php
function magic() {
echo 'This is function ' . __FUNCTION__;
}
magic(); // This is function magic
__CLASS__
เมื่อเรียกใช้งานในคลาส จะ return ค่า เป็นชื่อของคลาสปัจจุบัน

<?php
class MagicClass
{
public function Frostbite(){
return __CLASS__;
}
}
$obj = new MagicClass();
echo $obj->Frostbite(); // MagicClass
__TRAIT__
ก็เหมือนกันกับ __CLASS__
แต่เอามาใช้กับ trait

<?php
trait MagicTrait {
public function IceBlast() {
echo 'This is trait ' . __TRAIT__;
}
}
class IceMan {
use MagicTrait;
}
$obj = new IceMan();
$obj->IceBlast(); // This is trait MagicTrait
__METHOD__
เมื่อใช้งานจะ return ค่าเป็นชื่อของ method ในคลาสหรือ trait
นั้นๆ ที่ใช้งานอยู่

<?php
trait MagicTrait {
public function IceBlast() {
echo 'This is trait ' . __METHOD__;
}
}
class IceMan {
use MagicTrait;
}
$obj = new IceMan();
$obj->IceBlast(); // This is trait IceMan::IceBlast
__NAMESPACE__
เมื่อเรียกใช้งานจะ return ค่าเป็นชื่อของเนมสเปซที่ใช้งานอยู่

<?php
namespace MyWorld;
echo 'This is namespace ' . __NAMESPACE__; // This is namespace MyWorld
ClassName::class
เมื่อเรียกใช้งานจะ return ทุกอย่างใน class
นั้นๆ

<?php
class IceMan {
public function IceBlast() {
echo 'This is class ' . __METHOD__;
}
}
$obj = new IceMan();
$obj->IceBlast(); // This is class IceMan::IceBlast
เราจะเห็นการเขียนแบบนี้บ่อยๆ ใน Framework ต่างๆ ของ PHP เช่น ใน Laravel

use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);
คลิกเพื่อแสดงความคิดเห็น