PHP Conference Japan 2024

魔術常數

有一些魔術常數會根據它們的使用位置而改變。例如,__LINE__ 的值取決於它在程式碼中的行數。所有這些「魔術」常數都是在編譯時解析的,這與一般常數不同,一般常數是在執行時解析的。這些特殊常數不區分大小寫,如下所示

PHP 的魔術常數
名稱 說明
__LINE__ 檔案的目前行號。
__FILE__ 檔案的完整路徑和檔名,符號連結已解析。如果在 include 檔案內使用,則會返回被 include 檔案的名稱。
__DIR__ 檔案所在的目錄。如果在 include 檔案內使用,則會返回被 include 檔案的目錄。這等同於 dirname(__FILE__)。此目錄名稱沒有尾端斜線,除非它是根目錄。
__FUNCTION__ 函數名稱,或是匿名函數的 {closure}
__CLASS__ 類別名稱。類別名稱包含其宣告的命名空間(例如 Foo\Bar)。當在 trait 方法內使用時,__CLASS__ 是使用該 trait 的類別名稱。
__TRAIT__ Trait 名稱。Trait 名稱包含其宣告的命名空間(例如 Foo\Bar)。
__METHOD__ 類別方法名稱。
__PROPERTY__ 僅在屬性掛鉤內有效。它等於屬性的名稱。
__NAMESPACE__ 目前命名空間的名稱。
ClassName::class 完整的類別名稱(包含命名空間)。

新增註解

使用者貢獻的註解 3 則註解

Rich
1 年前
<?php

namespace My\App {
class
Api {
public static
fetch() {
print
__FUNCTION__ . "\n"; // 輸出 fetch
print __METHOD__ . "\n"; // 輸出 My\App\Api::fetch
}
}

Api::fetch();
}

namespace {
My\App\Api::fetch();
}
?>

__METHOD__ 輸出完整的 method 名稱(包含命名空間);__FUNCTION__ 在 method 中使用時,只輸出 method 名稱。
chris at ocproducts dot com
1 年前
請注意,__CLASS__ 和 __METHOD__ 都參考程式碼撰寫所在的類別,而不是物件的類別。例如,如果您有一個繼承自 A 類別的 B 類別物件,在 A 類別中使用 __CLASS__ 都會得到「A」。
theking2 at king dot ma
2 年前
如果 PHP 在 Web 伺服器請求內執行,__DIR__ 常數和 $_SERVER['DOCUMENT_ROOT'] 之間有一個重要的區別。

在 PHP 子資料夾中的腳本裡,`__DIR__` 會包含完整的伺服器路徑,而 `$_SERVER['DOCUMENT_ROOT']` 則只包含到應用程式根目錄的伺服器路徑。例如,當自動載入器定義在子資料夾的 include 檔案中,而類別位於應用程式根目錄的其他資料夾時,這會很有幫助。
To Top