原文: https://zetcode.com/php/config/

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

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

安装 PHP 配置

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

  1. $ composer req hassankhan/config symfony/yaml

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

composer.json

  1. {
  2. "autoload": {
  3. "psr-4": {
  4. "App\\": "src/"
  5. }
  6. },
  7. "require": {
  8. "hassankhan/config": "^2.0",
  9. "symfony/yaml": "^4.2"
  10. }
  11. }

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

PHP 配置 JSON 示例

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

config/db.json

  1. {
  2. "app": {
  3. "port": 3000
  4. },
  5. "db": {
  6. "host": "localhost",
  7. "port": 27017,
  8. "name": "ydb"
  9. }
  10. }

我们在config目录中有db.json

read_json_cfg.php

  1. <?php
  2. use Noodlehaus\Config;
  3. require('vendor/autoload.php');
  4. // $conf = Config::load('config/db.json');
  5. $conf = new Config('config/db.json');
  6. echo $conf->get('app.port') . "\n";
  7. echo $conf->get('db.host') . "\n";
  8. echo $conf->get('db.port') . "\n";
  9. echo $conf->get('db.name') . "\n";

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

  1. $ php read_json_cfg.php
  2. 3000
  3. localhost
  4. 27017
  5. ydb

这是输出。

PHP YAML 示例

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

config/db.yaml

  1. app:
  2. port: 3000
  3. db:
  4. host: localhost
  5. port: 27017
  6. name: ydb

这是db.yaml文件。

read_yaml_cfg.php

  1. <?php
  2. use Noodlehaus\Config;
  3. use Noodlehaus\Parser\Yaml;
  4. require('vendor/autoload.php');
  5. $conf = new Config('config/db.yaml', new Yaml);
  6. echo $conf->get('app.port') . "\n";
  7. echo $conf->get('db.host') . "\n";
  8. echo $conf->get('db.port') . "\n";
  9. echo $conf->get('db.name') . "\n";

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

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

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

  1. $ php read_yaml_cfg.php
  2. 3000
  3. localhost
  4. 27017
  5. ydb

This is the output.

合并配置文件

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

config/db.yaml

  1. app:
  2. port: 3000
  3. db:
  4. host: localhost
  5. port: 27017
  6. name: ydb

这是第一个配置文件。

config/app.yaml

  1. version: 2.0-dev

这是第二个配置文件。

merging.php

  1. <?php
  2. use Noodlehaus\Config;
  3. use Noodlehaus\Parser\Yaml;
  4. require('vendor/autoload.php');
  5. $conf = Config::load('config/db.yaml', new Yaml);
  6. $conf2 = Config::load('config/app.yaml', new Yaml);
  7. $conf->merge($conf2);
  8. echo $conf->get('db.port') . "\n";
  9. echo $conf->get('db.name') . "\n";
  10. echo $conf->get('version') . "\n";

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

使用AbstractConfig进行代码配置

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

src/Config/AbstractConfig.php

  1. <?php
  2. namespace App\Config;
  3. use Noodlehaus\AbstractConfig;
  4. class AppConfig extends AbstractConfig
  5. {
  6. protected function getDefaults()
  7. {
  8. return [
  9. 'host' => 'localhost',
  10. 'port' => 80,
  11. 'servers' => [
  12. 'host1',
  13. 'host2',
  14. 'host3'
  15. ]
  16. ];
  17. }
  18. }

该配置在AbstractConfiggetDefaults()文件中指定。

code_config.php

  1. <?php
  2. require('vendor/autoload.php');
  3. use Noodlehaus\Config;
  4. use App\Config\AppConfig;
  5. $conf = new AppConfig([]);
  6. echo $conf->get('host') . "\n";
  7. echo $conf->get('port') . "\n";
  8. echo $conf->get('servers')[0] . "\n";

该示例从代码读取配置。

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

列出所有 PHP 教程。