定义配置设置的正确方式


Correct way of defining configuration settings

我使用全局数组来定义应用程序的某些配置。但到目前为止,我已经读到全球化是一种糟糕的做法,应该避免。这个全局是只读的,所以我不会在代码中以任何方式更改它。

定义配置设置的正确方式是什么?

$GLOBALS['config'] = array(
    'mysql' => array(
        'host'     => 'localhost',
        'username' => 'user',
        'password' => 'password',
        'database' => 'database'
    ),
    'navigation' => array(
        'Home'    => array('/', '/index.php'),
        'Sign up' => array('/signup', '/signup.php'),
        'Log in'  => array('/login', '/login.php')
    )
);

从一个Configuration类开始,将所有设置保存在key->value对以及getter和setter方法的集合中。这个类是普通应用程序代码的一部分。

为了能够处理每个环境的不同设置,如示例中的连接参数,请使用多个文件。

对于每个环境,都存在一个文件夹来存储所有特定于环境的配置文件。

其中一个存储在这里的文件是一个脚本:

  • 创建静态配置对象
  • 将所有配置参数设置为该环境的值

应用程序的其他部分使用此静态对象从中获取设置。

不同文件夹中的文件具有相同的名称,例如在以下结构中:

- config
  - development
    - config.php
  - staging
    - config.php
  - production
    - config.php

在部署期间,将包括要部署到的环境的配置文件。我所做的也是将部署脚本放在这些文件夹中。

此设置支持多个环境,您可以将具有配置设置的文件置于版本控制之下。

我对PHP没有太多概念。但是对于OOP,您可以创建一个包含静态只读变量的类(可能名为Config)。然后按照以下使用它们

Config.mysqlConfig.navigation