PHP: Magic constants 🪄

Web Development

PHP: Magic constants 🪄

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

8 เดือนที่ผ่านมา

2 min read

__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']);

Tags:

PHP