19

我想创建一个 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..");

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

4

3 回答 3

11

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

但是,有几个缺点:

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

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

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

  • 这个类的目的与其他类不同——它旨在根据项目进行更改。您可能会考虑将 Config 类与其他类分开放置,例如通常保存配置文件的位置。

  • 使用真正的配置文件,由于您在运行时解析它,您可以想象处理丢失或无效的文件(例如,通过使用默认设置运行,使用可解析的部分,和/或显示有用的错误消息)。但是一旦你的配置作为 PHP 代码运行,任何语法错误——或者,如果你没有考虑到它,缺少的 Config 类——都会阻止应用程序死在它的轨道上。如果您在display_errors关闭状态下运行(建议在生产中使用),则问题可能不太明显。

于 2012-08-16T22:10:12.393 回答
8

我发现这 2 篇文章都在谈论相同的主题,我发现它们非常有用,所以我想在这里分享它们:

1-使用 PHP 类存储配置数据
2-使用 PHP 类存储配置

我希望他们能像他们为我所做的那样提供帮助。

于 2012-08-16T20:22:08.147 回答
2

我想,你想要的是静态关键字!

class Config {
    static $DB_SERVER    = 'localhost';
    static $DB_NAME      = 'abc';
    static $DB_USERNAME  = 'admin';
    static $DB_PASSWORD  = '12345';

    static $WEBSITE_NAME = 'My New Website';
    static $IMAGE_DIR    = 'img';
}

像那样。您不能使用 来调用它们::,例如Config::$DB_SERVER

顺便提一句。如果它们是类变量,通常你不会像那样写它们。Big 通常意味着全局变量。

于 2012-06-11T21:25:24.897 回答