ZetCode

PHP 配置

最后修改于 2025 年 2 月 16 日

PHP 配置教程展示了如何在 PHP 中创建配置文件。它使用了 hassankhan/config 包。

hassankhan/config 是一个轻量级的配置文件加载器,支持 PHP、INI、XML、JSON 和 YAML 文件。如果使用 YAML 文件,我们需要安装 symfony/yaml 包。

设置 PHP 配置

首先,我们安装必要的软件包。

$ composer req hassankhan/config symfony/yaml

我们使用 composer 安装两个软件包。

composer.json
{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "require": {
        "hassankhan/config": "^2.0",
        "symfony/yaml": "^4.2"
    }
}

这是 composer.json 文件。我们还启用自动加载。

PHP 配置 JSON 示例

在第一个示例中,我们从 JSON 文件中读取配置数据。

config/db.json
{
    "app": {
        "port": 3000
    },
    "db": {
        "host": "localhost",
        "port": 27017,
        "name": "ydb"
    }
}

我们在 config 目录中有一个 db.json 文件。

read_json_cfg.php
<?php

use Noodlehaus\Config;

require('vendor/autoload.php');

// $conf = Config::load('config/db.json');
$conf = new Config('config/db.json');

echo $conf->get('app.port') . "\n";

echo $conf->get('db.host') . "\n";
echo $conf->get('db.port') . "\n";
echo $conf->get('db.name') . "\n";

我们使用 Config::loadConfig 加载配置文件。值通过 get 方法检索。点字符用于遍历属性的层次结构。

$ php read_json_cfg.php
3000
localhost
27017
ydb

PHP YAML 示例

在第二个示例中,我们从 YAML 文件中读取配置数据。

config/db.yaml
app:
  port: 3000
  
db: 
  host: localhost
  port: 27017
  name: ydb

这是 db.yaml 文件。

read_yaml_cfg.php
<?php

use Noodlehaus\Config;
use Noodlehaus\Parser\Yaml;

require('vendor/autoload.php');

$conf = new Config('config/db.yaml', new Yaml);

echo $conf->get('app.port') . "\n";

echo $conf->get('db.host') . "\n";
echo $conf->get('db.port') . "\n";
echo $conf->get('db.name') . "\n";

该示例从 db.yaml 文件中读取配置文件。

$conf = new Config('config/db.yaml', new Yaml);

在第二个参数中,我们提供配置解析器。

$ php read_yaml_cfg.php
3000
localhost
27017
ydb

合并配置文件

merge 方法将配置文件分组。

config/db.yaml
app:
  port: 3000
  
db: 
  host: localhost
  port: 27017
  name: ydb

这是第一个配置文件。

config/app.yaml
version: 2.0-dev

这是第二个配置文件。

merging.php
<?php

use Noodlehaus\Config;
use Noodlehaus\Parser\Yaml;

require('vendor/autoload.php');

$conf = Config::load('config/db.yaml', new Yaml);
$conf2 = Config::load('config/app.yaml', new Yaml);

$conf->merge($conf2);

echo $conf->get('db.port') . "\n";
echo $conf->get('db.name') . "\n";
echo $conf->get('version') . "\n";

在示例中,我们合并了两个配置文件。我们可以使用一个对象访问来自这两个文件的属性。

使用 AbstractConfig 进行代码配置

我们可以通过使用 AbstractConfig 在代码中指定配置详细信息。

src/Config/AbstractConfig.php
<?php

namespace App\Config;
    
use Noodlehaus\AbstractConfig;

class AppConfig extends AbstractConfig
{
    protected function getDefaults()
    {
        return [
            'host' => 'localhost',
            'port'    => 80,
            'servers' => [
                'host1',
                'host2',
                'host3'
            ]
        ];
    }
}

配置在 AbstractConfiggetDefaults 文件中指定。

code_config.php
<?php

require('vendor/autoload.php');

use Noodlehaus\Config;
use App\Config\AppConfig;

$conf = new AppConfig([]);

echo $conf->get('host') . "\n";
echo $conf->get('port') . "\n";
echo $conf->get('servers')[0] . "\n";

该示例从代码中读取配置。

来源

hassankhan/config 存储库

在本文中,我们展示了如何使用 hassankhan/config 包在 PHP 中读取配置文件。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已经撰写了 1400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有 PHP 教程。