我有一个功能,它检查用户语言并将其写在变量中。过了一段时间,我想出来合并它们,所以我需要在第一次使用变量之前随时调用函数,所以我在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'
,仅此而已。
答案 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中并将值存储为对象属性,因此,例如,应用程序可以缓存多个数据库查询结果用户而不仅仅是当前用户。