# PHP 配置教程

> 原文： [https://zetcode.com/php/config/](https://zetcode.com/php/config/)

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

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

## 安装 PHP 配置

首先，我们安装必要的包。

```php
$ composer req hassankhan/config symfony/yaml

```

我们使用 composer 安装了两个包。

`composer.json`

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

```

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

## PHP 配置 JSON 示例

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

`config/db.json`

```php
{
    "app": {
        "port": 3000
    },
    "db": {
        "host": "localhost",
        "port": 27017,
        "name": "ydb"
    }
}

```

我们在`config`目录中有`db.json`。

`read_json_cfg.php`

```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::load()`或`Config()`加载配置文件。 使用`get()`方法检索这些值。 点字符用于遍历属性的层次结构。

```php
$ php read_json_cfg.php
3000
localhost
27017
ydb

```

这是输出。

## PHP YAML 示例

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

`config/db.yaml`

```php
app:
  port: 3000

db: 
  host: localhost
  port: 27017
  name: ydb

```

这是`db.yaml`文件。

`read_yaml_cfg.php`

```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`文件读取配置文件。

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

```

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

```php
$ php read_yaml_cfg.php
3000
localhost
27017
ydb

```

This is the output.

## 合并配置文件

`merge()`方法对配置文件进行分组。

`config/db.yaml`

```php
app:
  port: 3000

db: 
  host: localhost
  port: 27017
  name: ydb

```

这是第一个配置文件。

`config/app.yaml`

```php
version: 2.0-dev

```

这是第二个配置文件。

`merging.php`

```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
<?php

namespace App\Config;

use Noodlehaus\AbstractConfig;

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

```

该配置在`AbstractConfig`的`getDefaults()`文件中指定。

`code_config.php`

```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`包读取 PHP 中的配置文件。

列出[所有 PHP](/all/#php) 教程。