CodeIgniter 源码里面关于config_item函数不理解的地方

发布于 2022-09-04 03:37:11 字数 2328 浏览 14 评论 0

if ( ! function_exists('get_config'))
{
    /**
     * Loads the main config.php file
     *
     * This function lets us grab the config file even if the Config class
     * hasn't been instantiated yet
     *
     * @param    array
     * @return    array
     */
    function &get_config(Array $replace = array())
    {
        static $config;

        if (empty($config))
        {
            $file_path = APPPATH.'config/config.php';
            $found = FALSE;
            if (file_exists($file_path))
            {
                $found = TRUE;
                require($file_path);
            }

            // Is the config file in the environment folder?
            if (file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/config.php'))
            {
                require($file_path);
            }
            elseif ( ! $found)
            {
                set_status_header(503);
                echo 'The configuration file does not exist.';
                exit(3); // EXIT_CONFIG
            }

            // Does the $config array exist in the file?
            if ( ! isset($config) OR ! is_array($config))
            {
                set_status_header(503);
                echo 'Your config file does not appear to be formatted correctly.';
                exit(3); // EXIT_CONFIG
            }
        }

        // Are any values being dynamically added or replaced?
        foreach ($replace as $key => $val)
        {
            $config[$key] = $val;
        }

        return $config;
    }
}

// ------------------------------------------------------------------------

if ( ! function_exists('config_item'))
{
    /**
     * Returns the specified config item
     *
     * @param    string
     * @return    mixed
     */
    function config_item($item)
    {
        static $_config;

        if (empty($_config))
        {
            // references cannot be directly assigned to static variables, so we use an array
            $_config[0] =& get_config();
        }

        return isset($_config[0][$item]) ? $_config[0][$item] : NULL;
    }
}

$_config[0] =& get_config();function &get_config(Array $replace = array())里面&符号的作用不太理解= =这里使用&符号有什么特别的作用么= =求解答~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

内心旳酸楚 2022-09-11 03:37:11

引用传递和引用返回,一定程度上能节省内存空间,同时还可以达到间接修改目标值的情况。
引用传递官方文档:http://www.php.net/manual/zh/language.references.pass.php
引用返回官方文档:http://php.net/manual/zh/language.references.return.php

这里我针对函数引用返回,拓展个例子

function &get_config()
{
    static $config = 0;
    $config += 1;
    echo sprintf("config=%d\n",$config);
    return $config;
}

$config_item = get_config();
$config_item = 100;
$config_item = get_config();

$config_item = &get_config(); // 注意这里的&
$config_item = 100;
$config_item = get_config();

//输出
config=1
config=2
config=3
config=101
对你的占有欲 2022-09-11 03:37:11

传引用, 节省内存.

//它们都指向静态全局变量$config的zval
$config1 = &get_config();    
$config2 = &get_config();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文