首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 七大魔術常量完整指南:__LINE__、__FILE__、__DIR__ 等用法與版本差異

     編輯:PHP 綜合知識

什麼是魔術常量

魔術常量的值隨程式碼位置改變而改變,不區分大小寫,編譯時解析。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.0Trait 中為使用該 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

常見應用場景

  1. 日誌/除錯:自動帶入檔案、行號、類別、方法,免手動硬編碼。
  2. 自動載入器:spl_autoload_register(function($class){ $file = __DIR__.'/../src/'.$class.'.php'; ... });
  3. 路徑解析:config_path = __DIR__.'/../config'; 避免相對路徑在不同入口腳本下失效。
  4. 匿名類別/閉包識別:$obj = new class { public function who() { return __CLASS__; } }; 回傳 class@anonymous。

版本遷移提醒

  • PHP 5.3 前無 __DIR__、__NAMESPACE__,舊專案用 dirname(__FILE__) 替代。
  • PHP 8.0+ 新增 ::class 常量(如 DateTime::class 回傳 "DateTime"),可替代字串硬編碼,支援 IDE 重構。
  • __FILE__ 在符號連結下行為統一為實體路徑,若需保留連結路徑請用 $_SERVER['SCRIPT_FILENAME']。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved