php 全局作用域的问题
在使用thinkphp5做网站配置项实时生效的部分
在app_init钩子函数中读取配置表中的数据,这个数据要在全部页面内可以读取,我的思路是使用$GLOABLS. 但是我看到别人的代码中使用v函数,实现和$GLOABLS一样的效果.
$data=Db:table('config')->find();
$GLOBALS['config']=$data;//我的做法
v('config)=$data;//别人的做法
附v函数代码
// 应用公共文件
if ( ! function_exists('v')) {
/**
* 全局变量
*
* @param null $name 变量名
* @param string $value 变量值
*
* @return array|mixed|null|string
*/
function v($name = null, $value = '[null]')
{
static $vars = [];
if (is_null($name)) {
return $vars;
} else if ($value == '[null]') {
//取变量
$tmp = $vars;
foreach (explode('.', $name) as $d) {
if (isset($tmp[$d])) {
$tmp = $tmp[$d];
} else {
return null;
}
}
return $tmp;
} else {
//设置
$tmp = &$vars;
foreach (explode('.', $name) as $d) {
if ( ! isset($tmp[$d])) {
$tmp[$d] = [];
}
$tmp = &$tmp[$d];
}
return $tmp = $value;
}
}
}
我有点不太理解,这个函数怎么能实现项目中所有文件都能访问的变量,原理是什么样的了.请大神指教一二
可能我对php的作用域理解不够
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
他在每个文件里都引入了公共文件,在公共文件中将v定义到了当前作用域,为了防止重复,所以在定义之前先检查了一下当前作用域有没有多次引入公共文件,没有的话才继续定义v