全局与定义

时间:2011-08-07 19:08:06

标签: php

我有一个php文件,我需要能够轻松地翻转开关。本地服务器的开关设置为1,生产服务器的开关设置为0。 local_on = '1';或local_on ='0';。哪种方式更好(创建全局或使用定义)?如果哪种方式好,哪种方式是最佳做法?

7 个答案:

答案 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 truefalse似乎更合适。

答案 5 :(得分:1)

我更喜欢define。原因:

  • 您无法意外重新定义
  • 您可以在其他范围(例如函数)中使用而不需要丑陋的$ GLOBALS构造

PS:从PHP 5.3起,您可以使用const,而不仅仅是define来声明常量。它对我来说更具可读性

答案 6 :(得分:0)

简而言之,define就是您所寻找的(for said reasons)。

然而,在未来的开发中,您可能会为整个应用程序寻找类似依赖项的东西,提供它所运行的上下文。这不能用常量来完成,所以define除了< em>全局变量都是错误的。