A PHP Persistent Configurations Container
A PHP Persistent Configurations Container
Yaconf is a configurations container, it parses ini files, store the result in PHP when PHP is started, configurations live in the whole PHP lifecycle, which makes it very fast.
Yaconf is an PECL extension, thus you can simply install it by:
$pecl install yaconf
Or you can compile it by your self:
$ /path/to/php7/bin/phpize
$ ./configure --with-php-config=/path/to/php7/bin/php-config
$ make && make install
Path to directory which all ini configuration files are placed in
In which interval Yaconf will detect ini file's change(by directory's mtime),
if it is set to zero, you have to restart php to reloading configurations.
mixed Yaconf::get(string $name, mixed $default = NULL)
bool Yaconf::has(string $name)
Assuming we place all configurations files in /tmp/yaconf/, thus we added this into php.ini
yaconf.directory=/tmp/yaconf
Assuming there are two files in /tmp/yaconf
foo.ini
name="yaconf" ;string
year=2015 ;number
features[]="fast" ;map
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION ;PHP constants
features.env=${HOME} ;Enviorment variables
and bar.ini
[base]
parent="yaconf"
children="NULL"
[children:base] ;inherit from section "base"
children="set"
lets retrieve the configurations from Yaconf
php7 -r 'var_dump(Yaconf::get("foo"));'
/*
array(3) {
["name"]=>
string(6) "yaconf"
["year"]=>
string(4) "2015"
["features"]=>
array(5) {
[0]=>
string(4) "fast"
[1]=>
string(5) "light"
["plus"]=>
string(9) "zero-copy"
["constant"]=>
string(9) "7.0.0-dev"
["env"] =>
string(16) "/home/huixinchen"
}
}
*/
As you can see, Yaconf supports string, map(array), ini, env variable and PHP constants.
You can also access configurations like this:
php7 -r 'var_dump(Yaconf::get("foo.name"));'
//string(6) "yaconf"
php7 -r 'var_dump(Yaconf::get("foo.features.1"));'
//string(5) "light"
php7 -r 'var_dump(Yaconf::get("foo.features")["plus"]);'
//string(9) "zero-copy"
Now let’s see the sections and sections inheritance:
php7 -r 'var_dump(Yaconf::get("bar"));'
/*
array(2) {
["base"]=>
array(2) {
["parent"]=>
string(6) "yaconf"
["children"]=>
string(4) "NULL"
}
["children"]=>
array(2) {
["parent"]=>
string(6) "yaconf"
["children"]=>
string(3) "set"
}
}
*/
Children section has inherited values in base sections, and children is able to override the values they want.