php - 设置一个配置 PHP 类来保留项目设置是否正确?

标签 php class configuration configuration-files

我想创建一个 config.php 文件来保存通常在项目之间更改的各种配置值,并且我想定义一个类来将配置值保存在该文件中,如下所示:

class Config {
    const DB_SERVER    = 'localhost',
          DB_NAME      = 'abc',
          DB_USERNAME  = 'admin',
          DB_PASSWORD  = '12345',

          WEBSITE_NAME = 'My New Website',
          IMAGE_DIR    = 'img';
}

以此类推,我想在类中将所有值定义为常量,我会这样调用它们:

$connection = mysql_connect(Config::DB_SERVER, Config::DB_USERNAME, Config::DB_PASSWORD) or die("Database connection failed..");

我想知道:这种设置项目配置的方式对吗?这种方式有什么缺点吗?如果它是错误的,那么最好的方法是什么?

最佳答案

是的,这是一种方法。一个不太糟糕的方式,IMO。基本上这个类变成了一个配置文件,只是用了 PHP 语法。

不过也有一些缺点:

  • 您不能有常量数组或 对象。 (当然,你也不能有全局常量 arrays/objects,所以...)(从 5.6 开始,你可以有常量数组。不过仍然没有 const 对象。我很确定你也不能有 const 资源,因为那没有多大意义。)

    您可以通过为对象实现静态 getter 来解决这个问题(当然,它被编码为始终返回相同的对象)...但在大多数情况下我建议不要这样做。如果您的配置中的对象在设计上是不可变的,那么这只是一个安全的选择。 (并非为不可变性而设计的对象太容易更改,即使是意外更改也是如此。)

    (除了可变性问题,它让我在配置文件中拥有实际运行的代码...但这主要是个人偏好。)

  • 该类(class)与其他类(class)有不同的目的 -- 旨在根据项目进行更改。您可能会考虑将 Config 类保留在与其余类分开的某个位置,例如通常保留配置文件的位置。

  • 对于真实的配置文件,由于您在运行时对其进行解析,因此您可以想象处理丢失或无效的文件(例如,通过使用默认设置运行,使用哪些部分可解析,和/或显示有用的错误信息)。但是一旦您的配置作为 PHP 代码运行,任何语法错误——或者,如果您没有考虑到它,丢失的 Config 类——都会使应用程序停止运行。如果您在关闭 display_errors 的情况下运行(在生产中推荐),问题可能不太明显。

关于php - 设置一个配置 PHP 类来保留项目设置是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987703/

相关文章:

php - mysql查询时区转换

php - 刷新后显示的 Laravel 闪存消息

php-fpm 不创建 .sock 文件

python - 在 __func__ 上设置属性

javascript - 获取具有相同类的所有元素

java - 在 Mac 上安装 rJava 时遇到问题; JNI 数据类型的问题

.net - ChannelFactory 在端点上没有地址,为什么?

php - Mysql 密码已过期。无法连接

c++ - CMake 是否总是为所有可能的项目配置生成配置?

java - 当类型仅在运行时已知时如何指定泛型类型?