PHP封装了全局变量

时间:2010-12-08 00:03:10

标签: php

我有settings.php文件,我想保留一些常量,比如我的数据库连接信息。

我想要实现的目标,但对于我的生活,我无法想象如何做到这一点......我不希望我的settings.php中的每个常量全局可用。我正在使用MVC设置,例如我的控制器中没有我的数据库连接信息。

我的问题是,如何设置这样的设置文件:

class Settings {

  const HOST = 'localhost';

  ....

  const DEBUG = true;
}

然后将其加载到我的应用程序中,以便我的db连接常量被封装到我的Model类中,依此类推。

我确定我没有尽可能地解释这一点,但基本上我想要A:所有设置都有一个中心位置,B:这样我可以在整个应用程序中控制对这些设置的访问所以它们并非全球可用。

我遇到的问题是,如果我在我的父类中包含settings.php文件,那么它所固有的所有类也可以访问settings.php。

2 个答案:

答案 0 :(得分:1)

将它们包裹在一个函数中并调用它,例如

function init() {
    $model = new Model;
    $model->setConfigurationValue('name', 'value);
    // etc ...
}
init();

这样没有什么是全球性的。

就个人而言,我使用symfony components YAML库将我的配置存储在YAML文件中,这些文件会自动加载到单个配置对象中,该对象允许从任何地方进行访问,但可以防止状态发生变化。易于更改配置而不会弄乱代码,我使用多个YAML文件,以便我的DEV环境添加额外的配置等。

答案 1 :(得分:0)

我会在名为“local_settings.php”的文件中定义您的类。 只需“包含”文件并将您的课程设置在php程序的顶部。

对于那些围绕全球化的人来说,这些都是全球性的价值观!您不太可能有另一个类想要处理连接到不同数据库的模型的不同版本。