PHP7的Yaconf使用教程-PHP7

资源魔 31 0
这个名目并不是一个新的idea, 这个是我正在来微博当前, 第一个优化名目中随手做的一个小对象, 自身叫做Weibo_Conf. 然而由于Weibo_Conf是属于Weibo扩大的, 外面另有一些其余性能是专门为Weibo定制的. 以是没有适宜间接开源.

跟着PHP7的公布, 新增了不少耐久化类型的支持比方IS_IMMUTABLE_ARRAY, 于是我就正在PHP7下从新开发了Yaconf, 开源进去, 不便各人应用.

简介

起首说说, 这个是干啥的.

我见过不少的名目中, 用PHP文件做设置装备摆设的, 一个config目次下可能有十几个乃至数十个.php设置装备摆设文件, 外面都是各类百般的array, 另有甚者会把一些辞书文件(比方中文/英文对照)也放到设置装备摆设中去. 这就招致设置装备摆设文件的解析消耗了很年夜的功能(固然, 用了opcache能好点, 然而实际上仍是有执行的进程).

除了了PHP的, 另有用json的, yaml的, 一个独特的特性就是这些设置装备摆设的可读性比拟差. 另外, 他们也都要runtime解析.

config目次往往以及代码正在一同, 起首会有平安隐患(设置装备摆设中往往有敏感信息), 其次假如设置装备摆设以及代码属于一个名目, 这就会招致设置装备摆设的修正也要走代码上线的流程.

一些资本设置装备摆设文件, 比方mysql/memcache的设置装备摆设信息, 这些内容原本是应该对开发通明的, 运维间接担任便可. 然而放到了代码中就会招致, 运维假如要发动一些变卦, 也要开发合营修正设置装备摆设文件上线.

以是, Yaconf就是为理解决这些成绩而生的一个对象.

它应用独自的一个设置装备摆设目次(正在yaconf.directory指定), 和睦代码正在一同.

它正在PHP启动的时分, 解决一切的要解决的设置装备摆设, 而后这些设置装备摆设就会常驻内存, 跟着PHP的生命周期生死. 防止了每一次申请的时分解析设置装备摆设文件.

一切的设置装备摆设内容都是i妹妹utable的, 这就能够借助于Fork的COW, 升高内存占用, 而且正在拜访设置装备摆设的时分, 简直没有需求任何的内存Copy, 也没有会有没有谓的援用计数增减

最首要的, 设置装备摆设目次以及代码别离当前, 能够借助一个设置装备摆设治理后盾, 来完成设置装备摆设的对立化治理.

它支持(关于非ZTS)设置装备摆设变卦从新加载, 也就是说设置装备摆设假如有变动(倡议更改设置装备摆设肯定应用mv, 没有要应用cp), 它会reload, 没有需求重启(检测的频次由yaconf.check_delay管制).

它支持丰厚的设置装备摆设类型, 包罗字符串, 数组, 分节, 分节承继, 而且还能够正在设置装备摆设中间接写PHP的常量以及环境变量等.

最首要的是, 它很简略.

API

Yaconf 只提供了俩个办法,

mixed Yaconf::get(string $name, mixed $default = NULL)

这个是猎取一个设置装备摆设, 名字是设置装备摆设的名字, 普通来讲假如你有一个ini文件叫做foo.ini, 那末$name应用foo的话就会猎取到这个文件内的一切内容, 以数组方式前往. default是当设置装备摆设没有存正在的时分前往的默许值.

bool Yaconf::has(string $name)

这个是检测一个设置装备摆设能否存正在.

Yaconf的设置装备摆设项

yaconf.directory

设置装备摆设文件目次, 这个设置装备摆设不克不及经过ini_set指定, 由于必需正在PHP启动的时分就确定好.

yaconf.check_delay

多久(秒)检测一次文件变化, 假如是0就是没有检测, 也就是说假如是0的时分, 文件变卦只能经过重启PHP从新加载

设置装备摆设的格局

Yaconf采纳ini文件作为设置装备摆设文件, 这是由于我不断感觉ini是最适宜做设置装备摆设文件的, key-value格局, 明晰可读.

简略的设置装备摆设写起来以下(如下全副假定ini文件的名字是test):

foo="bar"
phpversion=PHP_VERSION
env=${HOME}

如上所示, 关于普通的设置装备摆设咱们都用引号惹起来. 而关于不惹起来的, 会测验考试以PHP的常量做诠释, 也就是说咱们能够间接正在设置装备摆设外面写PHP的常量.

另外你也看到了, 咱们能够间接正在设置装备摆设中写环境变量, 比方下面的env:

Yaconf::get("test.env"); //test是设置装备摆设文件名字
//string(16) "/home/huixinchen"

如下面所示, 你能够看到, 假定关于foo的值, 你能够经过以下代码拜访:

Yaconf::get("test.foo"); //test是设置装备摆设文件名字

Yaconf也支持数组类型的设置装备摆设, 写法以下:

arr.0=1
arr.1=2

假如是延续的数组,你也能够间接写:

arr[]=1
arr[]=2

那关于数组的值,你能够经过以下代码猎取:

Yaconf::get("test.arr");

这就猎取到了test设置装备摆设文件中的arr数组, 当然你也能够间接猎取数组中的一个详细的值,比方你要间接猎取test设置装备摆设文件中arr数组的第0号元素:

$arr = Yaconf::get("test.arr.0");

Yaconf也支持map类型的设置装备摆设, 写法以下:

map.foo=bar
map.bar=foo

;你能够应用分号来写正文

map2.foo.name=yaconf
map2.foo.year=2015

关于map2的foo子map的name值能够经过以下方式拜访:

Yaconf::get("test.map2.foo.name"); //test是设置装备摆设文件名字

而且, 设置装备摆设文件还能够分节, 以及分节承继:

[parent]
parent="base"
children="NULL"
[children : parent]
children="children"

请留意设置装备摆设的分节承继的语法 children:(冒号)parent, 这的意义是children节承继全副base的设置装备摆设项. 而后你正在children节外面界说的以及parent节中同名的设置装备摆设, 会笼罩掉parent中界说的内容.

关于chidlren节的children设置装备摆设的值能够经过以下方式拜访:

Yaconf::get("test.children.children"); //test是设置装备摆设文件名字

样例

起首, 假定咱们的一切的设置装备摆设文件都搁置正在/tmp/yaconf中, 那末咱们就需求正在php.ini中添加以下设置装备摆设:

yaconf.directory=/tmp/yaconf

这样yaconf正在PHP启动的时分, 就会正在这个目次下找一切的*.ini文件, 而后测验考试解决他们. 这里要留意的是没有支持多级目次, 也就是说, yaconf只会解决yaconf.directory内的*.ini文件, 没有会解决子目次外面的(这次要是为了简略思考, 由于有分节, 你就能够一个名目界说一个ini文件).

假定/tmp/yaconf下有俩个ini文件, 辨别是:

foo.ini

name="yaconf"
year=2015
features[]="fast"
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION
bar.ini

[base]

parent="yaconf"
children="NULL"
[children:base]
children="set"

而后关于foo的内容:

php7 -r 'var_dump(Yaconf::get("foo"));'
/*
array(3) {
  ["name"]=>
  string(6) "yaconf"
  ["year"]=>
  string(4) "2015"
  ["features"]=>
  array(4) {
    [0]=>
    string(4) "fast"
    [1]=>
    string(5) "light"
    ["plus"]=>
    string(9) "zero-copy"
    ["constant"]=>
    string(9) "7.0.0-dev"
  }
}
*/

关于bar的内容:

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"
  }
}
*/

当然你能够用 (.)链接语法准确拜访任何一个特定的值.

最初

我的Ya系列扩大今后又多了一个新成员, 算上以前的Yaf(PHP框架), Yar(PHP RPC框架), Yac(PHP单机缓存), 各人就能够很容易搭建一套高功能的LAMP使用处理计划进去.

注: Yaconf要求PHP7能力用

保举教程:《PHP7》

以上就是PHP7的Yaconf应用教程的具体内容,更多请存眷资源魔其它相干文章!

标签: php php7开发教程 php7开发资料 php7开发自学

抱歉,评论功能暂时关闭!