福田做商城网站建设找哪家公司好/广州seo工程师
如果常量的值是可变的,那么它不是常数,而是变量.
由于您(正确地)尝试将应用程序封装起来并远离全局范围,因此您可能对注册表模式感兴趣.注册表基本上是一个美化的数组,可存储您投入的任何内容,并可在整个应用程序中全局访问.
一些资源:
编辑如果你真的很绝望,必须重新定义,你可以使用
如果你在共享主机上运行套件可能不可用,我认为它需要代码味道,但这里你基本上是这样做的(在你的引导程序中)
if ( file_exists('xyc') ) {
runkit_constant_redefine('Constants::USERNAME', 'xyz');
}
编辑一些更多选项(所有这些选项也不完全相同):
class Abc { const FOO = 1; const BAR = 2; }
class Xyz extends Abc { const FOO = 2; }
class_alias(file_exists('abc') ? 'Abc' : 'Xyz', 'Constants');
为此,您将当前常量类重命名为Abc,并添加第二个类Xyz以扩展它并覆盖USERNAME常量(示例中的FOO).这显然会破坏您的代码,因为您曾经使用过Constants :: USERNAME,因此您必须为以前的类名创建别名. Constants将指向哪个类,由条件检查决定.这需要PHP5.3.
5.3之前的解决方案是简单地将Constants类文件保存在两个不同的名称下,例如abc_constants.php和xyz_constants.php,相应地修改后者以保存USERNAME xyz,然后包括或取决于文件检查.
或者用占位符替换USERNAME的值,而不是将您将其作为字符串加载到变量中的类.然后根据文件检查结果替换占位符并评估字符串,这样就有效地包括了类.
但我必须再说一遍:我强烈建议您重构代码而不是使用这些代码.