PHP配置教程展示了如何在PHP中创建配置文件。它使用hassankhan/config包。
$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) ...
我们使用PHP版本8.1.2。
hassankhan/config是一个轻量级的配置文件加载器,支持PHP、INI、XML、JSON和YAML文件。如果我们使用YAML文件,我们需要安装symfony/yaml包。
设置PHP配置
首先,我们安装必要的包。
$ composer req hassankhan/config symfony/yaml
我们用composer安装了两个包。
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"require": {
"hassankhan/config": "^2.0",
"symfony/yaml": "^4.2"
}
}
这是composer.json文件。我们还启用自动加载。
PHP配置JSON示例
在第一个示例中,我们从JSON文件中读取配置数据。
{
"app": {
"port": 3000
},
"db": {
"host": "localhost",
"port": 27017,
"name": "ydb"
}
}
我们在config目录中有db.json。
<?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 read_json_cfg.php 3000 localhost 27017 ydb
这是输出。
PHPYAML示例
在第二个示例中,我们从YAML文件中读取配置数据。
app: port: 3000 db: host: localhost port: 27017 name: ydb
这是db.yaml文件。
<?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方法对配置文件进行分组。
app: port: 3000 db: host: localhost port: 27017 name: ydb
这是第一个配置文件。
version: 2.0-dev
这是第二个配置文件。
<?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在代码中指定配置细节。
<?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文件中指定。
<?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教程。
