我想创建一个 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/