在大型 PHP 项目中处理配置?
Handling config in large PHP projects?
制作网站时,我总是只有一个 config.php
文件,里面有一堆常量,我将它包含在每个 PHP 文件的顶部:
1. config.php
// config.php
$hostname = get_user();
define("HOME", "/home/$hostname/my/website");
define("DB_USER", 'username');
define("DB_PASS", 'password');
这很简单,我从来没有遇到过问题。但是 这是在大型 PHP 网站中处理配置的标准方式吗?
我认为将所有配置包含在 class 中可能会更好,如下所示:
2。配置 class
class Config {
public $home;
const DB_USER = 'username';
const DB_PASS = 'password';
function __construct() {
$hostname = get_current_user();
$this->home = "/home/$hostname/my/website";
}
}
但这似乎使配置更加复杂,因为:
- 我现在不仅需要包含文件,还需要先实例化一个 Config 对象。
- 我需要混合使用属性和 class 常量,因为配置的某些部分是动态设置的。
- 整体代码并不那么简单。
总结.
我知道 class 提供了命名空间,但是像这样将配置放入 class 有什么更好的好处吗?
简而言之,这些天坚持使用 classic config.php 文件 是否仍然完美无缺,或者有什么原因让我期待使用更面向对象的配置方法?
编辑:
可以使用站点范围的配置文件。您通常会对特定于库的配置使用配置 class,以便库仅严格接受定义明确的配置对象作为其依赖项而不是数组。作为奖励,您可以获得类型提示配置参数的额外好处。
制作网站时,我总是只有一个 config.php
文件,里面有一堆常量,我将它包含在每个 PHP 文件的顶部:
1. config.php
// config.php
$hostname = get_user();
define("HOME", "/home/$hostname/my/website");
define("DB_USER", 'username');
define("DB_PASS", 'password');
这很简单,我从来没有遇到过问题。但是 这是在大型 PHP 网站中处理配置的标准方式吗?
我认为将所有配置包含在 class 中可能会更好,如下所示:
2。配置 class
class Config {
public $home;
const DB_USER = 'username';
const DB_PASS = 'password';
function __construct() {
$hostname = get_current_user();
$this->home = "/home/$hostname/my/website";
}
}
但这似乎使配置更加复杂,因为:
- 我现在不仅需要包含文件,还需要先实例化一个 Config 对象。
- 我需要混合使用属性和 class 常量,因为配置的某些部分是动态设置的。
- 整体代码并不那么简单。
总结.
我知道 class 提供了命名空间,但是像这样将配置放入 class 有什么更好的好处吗?
简而言之,这些天坚持使用 classic config.php 文件 是否仍然完美无缺,或者有什么原因让我期待使用更面向对象的配置方法?
编辑:
可以使用站点范围的配置文件。您通常会对特定于库的配置使用配置 class,以便库仅严格接受定义明确的配置对象作为其依赖项而不是数组。作为奖励,您可以获得类型提示配置参数的额外好处。