[TOC] > [鸟哥博客](http://www.laruence.com/2015/06/12/3051.html) > [github](https://github.com/laruence/yaconf) ## 概述 1. 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起. 2. 它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件. 4. 最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理. 5. 它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制). 6. 它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等. ## 安装 ### pecl `sudo pecl install yaconf` ### 编译安装 ``` $ /path/to/php7/bin/phpize $ ./configure --with-php-config=/path/to/php7/bin/php-config $ make && make install ``` ## api ### Yaconf::get `mixed Yaconf::get(string $name, mixed $default = NULL)` 一般来说如果你有一个ini文件叫做foo.ini, 那么$name使用foo的话就会获取到这个文件内的所有内容, 以数组形式返回. default是当配置不存在的时候返回的默认值. ### Yaconf::has `bool Yaconf::has(string $name)` 这个是检测一个配置是否存在. ## 运行时配置 ``` [yaconf] ;设置ini 的路径 yaconf.directory=/Users/idcpj/Web/easyswoole/ini ;如果设置为零,您必须重新启动php来重新加载配置 yaconf.check_delay=1 ``` ## demo 在 ini 下创建 `foo.ini` ``` name="yaconf" year=2015 ;配置数组 features[]="fast" features.1="light" ;配置 key-value features.plus="zero-copy" ; php 常量 features.constant=PHP_VERSION ;读取环境变量 features.env=${HOME} [base] parent="yaconf" children="NULL" ;集成 childre 继承并覆盖 base [children:base] children="set" ``` ``` Yaconf::get('foo.year'); //2015 Yaconf::get('foo'); /*[ 'name' => 'yaconf', 'year' => '2015', 'features' => [ 0 => 'fast', 1 => 'light', 'plus' => 'zero-copy', 'constant' => '7.1.23', 'env' => '/Users/idcpj', ], 'base' => [ 'parent' => 'yaconf', 'children' => 'NULL', ], 'children' => [ 'parent' => 'yaconf', 'children' => 'set', ], ]*/ ```