Php:配置变量哪个更好?变量还是参数?

时间:2011-04-02 20:12:57

标签: php

我在php中完成了一个应用程序,并且所有配置变量都在脚本开头的大$ conf变量中加载。

将此配置变量传递给所有其他函数的更好方法是什么?

使它成为每个功能的参数?或者使用“global $ conf;”每个职能部门的陈述?

有更好的方法吗?

由于

3 个答案:

答案 0 :(得分:4)

使用PHP constants

为了小马,请不惜一切代价避免使用全局变量:)

修改

关于“不惜一切代价避免全球变量”的一些解释和可能的替代方案:

答案 1 :(得分:2)

创建一个存储选项的配置类。使它成为单身PHP Manual describes that here。这只是全局变量的替代方案。它允许您定义一个方法来从文件或php数组加载选项并将它们存储在类中。其他类可以通过获取单个实例并访问数据来使用配置对象。

我认为这比全局变量更好,因为另一个答案也说。但它仍然允许您将选项定义为数组,甚至可以根据需要定义嵌套数组(并相应地设置您的类)

答案 2 :(得分:0)

您使用单个全局范围的变量$conf完全没问题。许多PHP应用程序都这样做。但是战斗有一些缺点。

特别是在要访问它们的每个函数中编写global $conf通常会更加努力。在这种情况下,我建议使用简单的全局包装函数:

function conf($key, $sub="") {
    global $conf;
    if (defined($key))
        { return constant($key); }
    elseif ($sub)
        { return $conf[$key][$sub]; }
    else
        { return $conf[$key]; }
}

这使您可以在需要时编写conf("setting1")conf("main", "opt3")。您仍然可以访问更适合的全局$conf。作为额外奖励,您可以通过允许查询替代设置等使此包装函数更加智能化。还可以看到在conf("CONSTANT")支持中潜行是多么容易。

保持这一点可以在定义配置设置时增加一些灵活性。我个人使用类似的方法,虽然步骤而不是一次定义数组:

$app_config["title"] = ...;
$app_config["editor.btns"] = ...;
define("RESTRICTED_MODE", true);

我更喜欢使用array()方法,但过渡到ini文件以便稍后存储不是问题。此外,如果需要,您仍然可以将配置数组设置为只读。为此,只需定义:

class Read_Only_Array extends ArrayObject { function offsetSet() {} }
$conf = new ReadOnlyArray($conf);

所以它仍然可以作为数组访问,但你很容易确定其他人使用繁琐的注册表或语法解决方法。


“全球化是邪恶的”模因完全是胡扯。货运崇拜程序员希望过度简化,并且在不理解语言语义的情况下浏览大胆的新闻标题的新人会对SO进行抨击。

在您的情况下,您只需使用一个$ conf变量,并且不会污染共享范围。当从整个应用程序中连贯地访问它时,那不是问题。但是,您应该严格避免在运行时修改内容(如果需要,请使用Read_Only_Array)。为此创建辅助$app_var[] aray,并使配置设置保持静态。