我应该如何在php中存储设置变量?

时间:2011-12-05 10:06:57

标签: php coding-style

我目前正在用PHP编写程序。我想让我的脚本用户更改一些设置,如数据库位置和用户。 这些变量放在脚本的第一行。

现在我想从类和函数中的任何地方访问这些变量。

我使用了全局变量。但是一位同事告诉我不要使用全局变量。

那么在php中存储和访问设置的常用方法是什么?

5 个答案:

答案 0 :(得分:6)

您可以使用默认为全局的常量:

define('APPLICATION_SETTING', true);

否则,您可以使用Registry Singleton类,在该类中加载设置并将它们存储在类私有变量中。 经典注册表类结构:

class Registry {
    private $instance = NULL;
    private $vars = array();
    private __construct() {/**/}
    public static function getInstance() {/**/}
    public function get($key) {/**/}
    public function set($key, $value) {/**/}
}

不,我建议你不要使用注射和填充模式。只需使用Singleton。使用Injection,你会变得更糟,更复杂。

答案 1 :(得分:3)

通过更改脚本中的变量来配置脚本是一个坏主意。

存储配置设置的最简单方法是使用.ini文件并使用parse_ini_file函数解析它。 http://php.net/manual/en/function.parse-ini-file.php

样本ini:

[db]
host = "foo.org"
user = "dbguy"

[session]
timeout = 600

如果你的脚本是面向对象的,你应该将配置设置包装在一个类中......并将它作为构造函数参数传递给你的主类。

否则您可以使用全局数组,但请不要在函数中使用'global'关键字!您的函数应接受函数中的设置作为参数。

$config = parse_ini_file("protectedFolder/config.ini", true);

//wrong, do not do it this way
function connect(){
  global $config;
  $connection = dostuff($config['db']['user'],$config['db']['host'];
  //do stuff
}

connect();

//right
function connect2($user, $host){
  $connection = dostuff($user, $host);
  //do stuff
}

connect2($config['db']['user'], $config['db']['host']);

这是一个非常简单的概念,有更好的方法可以做到这一点,但它应该让你开始,它将为简单的应用程序做好工作。

如果你需要更复杂的东西,你应该谷歌“依赖注入”

编辑:编辑过的评论 EDIT2:修复缺失的引号

答案 2 :(得分:1)

有几种方法。以下是一些选项:

  • 如果变量不会改变,你可以使用常量。
  • 你可以使用一个单独的配置对象(虽然一般来说单身人士不赞成;我个人认为在全局配置的情况下它们非常有用)。
  • 此外,您可以将变量作为函数参数传递。

这实际上取决于您正在开发的应用程序和个人偏好。但是,从长远来看,全局变量往往会使用它们变得笨拙。

答案 3 :(得分:0)

您可以在服务器中安装一个简单的sqlite数据库,以便放置只能由您的php程序访问的配置设置。通过将sqlite的查询封装到一个简单的类中,您不必使用全局变量。

答案 4 :(得分:-1)

在这种情况下你的同事是错的。 Globals是存储需要随处可用的设置的最便捷方式。这就是全球 的东西,可以随处获得。 PHP已经充满了全局变量,例如$_REQUEST。将您的设置放在一个名为$SETTINGS的全局数组中是我的建议。