替换变量内部的替换变量

时间:2013-06-10 23:43:44

标签: php function variables global-variables anonymous-function

我有一个功能,它检查用户语言并将其写在变量中。过了一段时间,我想出来合并它们,所以我需要在第一次使用变量之前随时调用函数,所以我在var中调用了函数,有了一个想法,我会替换它自。但它不起作用,因为它试图给我一个“关闭对象”回来,我认为这是一个明确的功能,而不是结果:(这是代码的重要部分:

$GLOBALS['user_language'] = function()
{
    return get_user_language();
}

function get_user_language()
{
    $user_language = 'en';
    $GLOBALS['user_language'] = $user_language;
    return $user_language;
}

//somewhere in the script
print_r($GLOBALS['user_language']);

我希望得到'en',仅此而已。

2 个答案:

答案 0 :(得分:1)

function get_user_language()
{
    $user_language = 'en';
    $GLOBALS['user_language'] = $user_language;
    return $user_language;
}

$GLOBALS['user_language'] = get_user_language();


//somewhere in the script
print_r($GLOBALS['user_language']);

但这很奇怪,因为你已经在get_user_language()中设置了它然后再次拉它。它几乎会创建一个循环。正确的方法可能是从函数中删除$GLOBALS['user_language'] = $user_language;

希望这能回答你的问题。

答案 1 :(得分:0)

只需使用print_r(get_user_language())代替print_r($GLOBALS['user_language']);

如果多次获取用户的语言会特别慢(例如数据库查询会一遍又一遍地执行),您可以这样做:

function get_user_language()
{
    static $user_language = null;
    if ($user_language === null) {
        $user_language = 'en'; // this would be where you make the DB query
    }
    return $user_language;
}

实际上,在大型PHP应用程序中,此代码通常位于class中并将值存储为对象属性,因此,例如,应用程序可以缓存多个数据库查询结果用户而不仅仅是当前用户。