魔術常量的值隨程式碼位置改變而改變,不區分大小寫,編譯時解析。PHP 共有 9 個(含 ::class),本文詳細說明最常用的 7 個。
| 常量 | 說明 | 新增版本 | 注意事項 |
|---|---|---|---|
__LINE__ | 當前行號 | PHP 4 | |
__FILE__ | 檔案完整路徑與檔名(被 include 時為被包含檔案)。PHP 4.0.2+ 回傳解析後絕對路徑(含符號連結解析)。 | PHP 4 | 早期版本可能回傳相對路徑 |
__DIR__ | 檔案所在目錄(不含尾部斜槓,根目錄除外)。等同 dirname(__FILE__)。 | PHP 5.3.0 | |
__FUNCTION__ | 函數名稱(區分大小寫)。PHP 5+ 回傳定義時名稱;PHP 4 回傳小寫。 | PHP 4.3.0 | 閉包中為 {closure} |
__CLASS__ | 類別名稱(區分大小寫,含命名空間)。PHP 5+ 回傳定義時名稱;PHP 4 回傳小寫。 | PHP 4.3.0 | Trait 中為使用該 Trait 的類別名 |
__METHOD__ | 類別方法名稱(區分大小寫,格式 Class::method)。 | PHP 5.0.0 | |
__NAMESPACE__ | 當前命名空間名稱(大小寫敏感),編譯時定義。 | PHP 5.3.0 | 全域空間為空字串 |
<?php
namespace App\Utils;
class Debug {
public static function log($msg) {
echo "[".__NAMESPACE__."\\".__CLASS__."::".__FUNCTION__." @ ".__FILE__.":".__LINE__."] $msg\n";
}
}
Debug::log('Service started');
// 輸出:[App\Utils\Debug::log @ /var/www/app/Utils/Debug.php:10] Service started
spl_autoload_register(function($class){ $file = __DIR__.'/../src/'.$class.'.php'; ... });config_path = __DIR__.'/../config'; 避免相對路徑在不同入口腳本下失效。$obj = new class { public function who() { return __CLASS__; } }; 回傳 class@anonymous。__DIR__、__NAMESPACE__,舊專案用 dirname(__FILE__) 替代。::class 常量(如 DateTime::class 回傳 "DateTime"),可替代字串硬編碼,支援 IDE 重構。__FILE__ 在符號連結下行為統一為實體路徑,若需保留連結路徑請用 $_SERVER['SCRIPT_FILENAME']。