是否可以在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年,重写框架不是一种选择。
答案 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对全局常量进行分组总是一个好主意。扩展类是一种有一些合理默认值的简洁方法。