-1

I have a function, that check user language and write it down in a variable. After a time, i come of idea to merge they, so that i need a call the function anytime before the first use of a variable, so i put a call of function inside of var, with a idea, that i would be replace it self. But it does not working, becouse it trying to give me a "Closure Object" back, i think it is a function in clear and not the result :( Here is the important part of code:

$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']);

I wish to get 'en' out, nothing more.

4

2 回答 2

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;从函数中删除。

希望这能回答你的问题。

于 2013-06-11T00:02:33.663 回答
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 应用程序中,此代码通常位于中,并将值存储为对象属性,这样,例如,应用程序可以缓存多个用户的数据库查询结果,而不仅仅是当前一。

于 2013-06-11T00:09:13.653 回答