PHP中的变量常量

时间:2014-03-06 13:28:24

标签: php variables constants

是否可以在PHP中更改常量的值?我们希望项目的配置文件具有合理的默认值。

目前我们正在做:

的config.php:

define('WEB_ROOT', '/home/user/public_html');

config.default.php:

defined('WEB_ROOT') || define('WEB_ROOT', '/home/user/public_html');

问题在于,在某些情况下,您可能希望从“config.php”内部访问某些配置默认值。例如:

的config.php

define('USER_FILE_ROOT', WEB_ROOT.'/files');

配置常量的方案已经使用了5年,重写框架不是一种选择。

3 个答案:

答案 0 :(得分:0)

原来你可以!

首先声明默认值如下:

define('WEB_ROOT', '/var/www', TRUE);

然后包含配置文件:

define('WEB_ROOT', '/home/user/public_html');

此代码效果很好:

define('FOO', 'BAR', TRUE);
echo FOO; // outputs BAR
define('FOO', 'FOOBAR');
echo FOO; // outputs FOOBAR

这是PHP支持声明不区分大小写的常量这一令人难以置信的事实的副作用。

答案 1 :(得分:0)

这是一个常数,根据定义,你不应该重新定义它。问题在于您的代码逻辑,如果您最终需要重新定义它。

但如果您仍想继续这条路,可以使用runkit_constant_redefine

答案 2 :(得分:0)

我使用以下模式解决了默认常量问题:

config.default.php

class Config_Defaults{
    const WEB_ROOT = '/home/user/public_html';
}

config.myenvironment.php

class Config extends Config_Defaults {
    const WEB_ROOT = '/var/www';
}
Imho,使用Config-Class对全局常量进行分组总是一个好主意。扩展类是一种有一些合理默认值的简洁方法。