2011-04-02 55 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