我有一个php文件,我需要能够轻松地翻转开关。本地服务器的开关设置为1,生产服务器的开关设置为0。 local_on = '1';或local_on ='0';。哪种方式更好(创建全局或使用定义)?如果哪种方式好,哪种方式是最佳做法?
答案 0 :(得分:11)
如其名称所示,全局变量变量 - 这意味着其值可以由代码的任何部分更改;在你的情况下,这可能不是你想要的。
另一方面,常量(您将使用define
设置)是......好...... 常量;并且,因此,一旦设置就不能修改;在你的情况下,这可能是你想要的。
考虑到变量与常量的想法,对于这种开关,我通常使用define()
和常量。
答案 1 :(得分:9)
define
。您以后无法更改其值,并且其值始终可用于所有范围,简洁。
答案 2 :(得分:4)
定义是两者中更好的选择,因为全局变量是坏消息,原因我确定你已经熟悉了,因为你必须记住在每个函数和方法中声明global $var
在你的代码中。定义的常量随处可见。此外,在脚本运行期间,可能会无意中将变量设置为从一个状态到另一个状态。如果发生错误,这可能会导致一些非常难以发现的错误。
答案 3 :(得分:2)
另一种比定义符号和最小化名称冲突更好的方法是类声明,如
abstract config {
const LOCAL = true; // toggle to false
// or maybe
const SERVER = 'local'; // toggle to 'remote'
// (maybe having if (config.SERVER == 'remote') would be more readable in some
// cases than if (!config.LOCAL) depends on your app)
}
答案 4 :(得分:1)
只要您记得选择一个独特的名称(define
s的全大写)并使用现代方式通过$GLOBALS
超全局(原文如此)访问全局变量,两者都可以正常工作。此外,全局变量是变量,因此理论上你可能会偶然改变它的值。
为了简化部署而不是意外地设置或取消设置开关,我建议您通过检查$_SERVER
的属性自动设置它,例如
// Turn on debugging code on local machine
define('MYPAGE_LOCAL_ON', $_SERVER['SERVER_NAME'] == 'my-dev-box');
另外,我不明白你为什么要把开关设置为字符串或整数。 boolean values true
和false
似乎更合适。
答案 5 :(得分:1)
我更喜欢define
。原因:
PS:从PHP 5.3起,您可以使用const
,而不仅仅是define
来声明常量。它对我来说更具可读性
答案 6 :(得分:0)
简而言之,define
就是您所寻找的(for said reasons)。
然而,在未来的开发中,您可能会为整个应用程序寻找类似依赖项的东西,提供它所运行的上下文。这不能用常量来完成,所以define
除了< em>全局变量都是错误的。