鍍金池/ 問答/Java  PHP  HTML/ php 全局作用域的問題

php 全局作用域的問題

在使用thinkphp5做網(wǎng)站配置項實時生效的部分

在app_init鉤子函數(shù)中讀取配置表中的數(shù)據(jù),這個數(shù)據(jù)要在全部頁面內(nèi)可以讀取,我的思路是使用$GLOABLS. 但是我看到別人的代碼中使用v函數(shù),實現(xiàn)和$GLOABLS一樣的效果.

$data=Db:table('config')->find();
$GLOBALS['config']=$data;//我的做法
v('config)=$data;//別人的做法

附v函數(shù)代碼

// 應(yīng)用公共文件
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 {
            //設(shè)置
            $tmp = &$vars;
            foreach (explode('.', $name) as $d) {
                if ( ! isset($tmp[$d])) {
                    $tmp[$d] = [];
                }
                $tmp = &$tmp[$d];
            }

            return $tmp = $value;
        }
    }
}

我有點不太理解,這個函數(shù)怎么能實現(xiàn)項目中所有文件都能訪問的變量,原理是什么樣的了.請大神指教一二
可能我對php的作用域理解不夠

回答
編輯回答
伴謊

他在每個文件里都引入了公共文件,在公共文件中將v定義到了當前作用域,為了防止重復,所以在定義之前先檢查了一下當前作用域有沒有多次引入公共文件,沒有的話才繼續(xù)定義v

2017年11月3日 11:50