2010-12-08 138 views
0

我有settings.php文件,我想保留一些常量,就像我的db连接信息。PHP封装全局变量

我想要完成什么,但对于我的生活,我无法想象如何做到这一点......我不想每个常量在我的settings.php全局可用。我正在使用MVC设置,例如我的控制器中没有我的db连接信息。

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

class Settings { 

    const HOST = 'localhost'; 

    .... 

    const DEBUG = true; 
} 

然后将其加载到我的应用程序,使我的数据库连接常量封装到只是我的Model类等。

我确定我没有解释这个最好的我可以,但基本上我想A:有一个中心位置的所有设置和B:使它可以控制对整个我的设置的访问权限应用程序,以便它们不是全部可用的。

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

+0

这样的常量有什么意义?使用普通变量,创建一个PDO连接并取消设置(或让GC处理)这些变量。 – Crozin 2010-12-08 00:23:38

+0

所以如果有东西被包含,那么值就不能被改变。所以,你认为这并不重要? – imns 2010-12-08 01:03:58

回答

1

将它们包装在一个函数中,然后调用它。

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

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

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

0

我将在名为“local_settings.php”的文件中定义您的类。 只需“包含”该文件并将您的课程安排在您的PHP程序的顶部即可。

对于所有关于全局变量的人来说,这些都是全球性的值!您不可能有另一个班级想要在模型的不同版本上连接到不同的数据库。