setglobal,getglobal源码分析

2024-11-09 10:59:30

1、global $_G;$key = explode('/', $group === null ? $key : $group.'/'.$key);setglobal,和getglobal函数前两句话是一样的。global 函数内访问全局变量。$key = explode('/', $group === null ? $key : $group.'/'.$key);$group貌似没看到使用这个形参。$key=’timestamp’;返回:$key=Array ( [0] => timestamp );$key=’config/remote/dir’;返回:$key=Array ( [0] => config [1] => remote [2] => dir );配置文件下面的配置选项。

2、getglobal分析$v = &$_G;foreach ($key as $k) { if (!isset($v[$k])) { return null; } $v = &$v[$k];}$v = &$_G;&取地址符。$v和$_G指向同一地址。foreach ($key as $k),循环$key。$v[$k]不存在,返回null。$v = &$v[$k];这句用的很巧妙,从一维到二维到三维...。

3、setglobal分析$p = &$_G;foreach ($key as $k) { if(!isset($p[$k]) || !is_array($p[$k])) { $p[$k] = array(); } $p = &$p[$k];} $p = &$_G; foreach ($key as $k)和上面解释一样。 !isset($p[$k]) || !is_array($p[$k])短路规则,算法用的很巧妙,不过难理解,小编是编不出这么巧妙的代码。小编平时在开发时候更愿意用更多的代码,表达这个意思,便于好理解。 $p[$k]定义了,!isset($p[$k])返回false,短路规则执行!is_array($p[$k]),不是数组执行if体。 $p[$k]没定义,!isset($p[$k])返回true,短路规则,不执行||后面代码,执行if体。 $p = &$p[$k];和上面解释一样,从一维到二维到三维...。

猜你喜欢