PHP 5.3 引入 __DIR__ 魔術常數,直接回傳目前執行腳本所在的絕對目錄路徑(不含結尾斜線),等同於 dirname(__FILE__) 但更簡潔、效能略優。
| 常數 | 範例值(腳本 /www/website/index.php) | 說明 |
|---|---|---|
__FILE__ | /www/website/index.php | 完整檔案路徑 |
__DIR__ | /www/website | 目錄路徑(PHP 5.3+) |
dirname(__FILE__) | /www/website | 舊版相容寫法 |
require_once __DIR__ . '/config.php';
include __DIR__ . '/functions/helper.php';
// 假設腳本在 /var/www/project/public/index.php
define('ROOT_PATH', dirname(__DIR__)); // /var/www/project
require_once ROOT_PATH . '/vendor/autoload.php';
使用 include './file.php' 會隨「當前工作目錄」改變而失效,__DIR__ 永遠指向腳本實際位置,極大提升可靠度。
__DIR__ 在編譯階段即解析為字面常數,dirname(__FILE__) 需執行函式呼叫。雖差異極微(奈秒級),但在大量包含的專案中累積可觀。
dirname(__FILE__) 或定義常數:define('CURRENT_DIR', dirname(__FILE__));| 常數 | 說明 |
|---|---|
__LINE__ | 目前行號 |
__FUNCTION__ | 函式名稱(區分大小寫) |
__CLASS__ | 類別名稱(含命名空間) |
__METHOD__ | 類別方法名稱 |
__NAMESPACE__ | 目前命名空間名稱 |
永遠使用 __DIR__ 替代 dirname(__FILE__),語意更清晰、程式碼更簡潔、效能略優,是現代 PHP 專案的標準寫法。