2011-04-02 97 views
5

好吧,這是一個愚蠢的問題,但我不能想到它是愚蠢的確切原因。PHP - 爲類常量賦值函數

在PHP當你定義一個類級別的常量爲:

const MY_CONSTANT = 'hello constant'; 

你爲什麼不能初始化這個值與函數如

const MY_FILEPATH = dirname(dirname(__FILE__)) . '/heres-my-file.php'; 
+4

歡迎來到SO。這已經在這裏深入討論:http://stackoverflow.com/questions/3960323/why-dont-php-attributes-allow-functions答案很長:)無論如何,這是絕對不可能的,你可能想離開它在那。 – 2011-04-02 22:44:51

回答

14

簡言之:常量被替換,而解析,但功能在解釋時執行。解析器根本無法知道應該如何設置內容的值。

+1

嗨,謝謝。那好吧,那是有道理的。做這種事情的最佳實踐是什麼,因爲它必須發生很多 - 需要一個常量值,但是它是從函數調用或其他東西中定義的。 – David 2011-04-02 22:48:19

1

常量是不可變的。因此,如果函數可以改變常量的值,那麼它就不是常數。

+0

是的,但我不想改變一個常量的值,而是試圖用函數的值初始化它。 – David 2011-04-02 22:52:20

+0

我明白你的意思。但是,如果函數可以初始化一個常量,理論上它可以改變它的值。因爲該常量必須在類中初始化(如果它也是在類中聲明的)。 – Nabeel 2011-04-02 22:57:13

+0

「如果函數可以初始化一個常量,理論上它可以改變它的值」。這對我沒有多大意義。如果一個常量被初始化,它是一個常量。如果未初始化,則不存在。永遠不會有變化。 – KingCrunch 2011-04-02 23:11:25