php 全局作用域的问题

发布于 2022-09-07 20:59:32 字数 1329 浏览 26 评论 0

在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

西瑶 2022-09-14 20:59:32

他在每个文件里都引入了公共文件,在公共文件中将v定义到了当前作用域,为了防止重复,所以在定义之前先检查了一下当前作用域有没有多次引入公共文件,没有的话才继续定义v

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文