Php 替换变量位于替换变量的内部
我有一个函数,它检查用户语言并将其写在变量中。过了一段时间,我产生了合并它们的想法,这样我就需要在第一次使用变量之前随时调用函数,所以我在var内部调用函数,我会自己替换它。但它不起作用,因为它试图给我一个“闭包对象”,我认为它是一个函数,而不是结果:(这是代码的重要部分:Php 替换变量位于替换变量的内部,php,function,variables,global-variables,anonymous-function,Php,Function,Variables,Global Variables,Anonymous Function,我有一个函数,它检查用户语言并将其写在变量中。过了一段时间,我产生了合并它们的想法,这样我就需要在第一次使用变量之前随时调用函数,所以我在var内部调用函数,我会自己替换它。但它不起作用,因为它试图给我一个“闭包对象”,我认为它是一个函数,而不是结果:(这是代码的重要部分: $GLOBALS['user_language'] = function() { return get_user_language(); } function get_user_language() { $
$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'
拿出来
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\u user\u language()
中设置了它,然后再次拉它。它几乎会创建一个循环。正确的方法可能是从函数中删除$GLOBALS['user\u language']=$user\u language;
希望这能回答您的问题。只需使用print\r(get\u user\u language())
而不是print\r($GLOBALS['user\u 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应用程序中,此代码通常位于中,并将值存储为对象属性,因此,例如,应用程序可以缓存多个用户的DB查询结果,而不仅仅是当前用户的查询结果。此代码没有任何意义。您对要执行的操作的描述不太清楚也可以是描述性的。你不能从变量中调用函数。为什么你不粘贴整个脚本,而不是试图粉饰一个没有任何意义的伪版本?如果错误在这里,你还需要什么?你还需要200行代码做什么,才能知道我如何设置
$user\u language
变量?它不是问题的关键是。@Dmi7ry@BASILIO,whitemiths_样式可以,但制表符需要更改为空格-制表符不显示correctly@Dmi7ry你能做一个标签显示不正确的屏幕截图吗?我在Debian下使用Opera,没有发现任何问题:OThank你非常感谢,这正是我所需要的。运行它,你就会明白了叮叮我,我为什么这么做;)妈的,我太早了,不能从快乐的终点起舞。这不是我想要的。我需要调用get\u user\u language()
只有我调用$GLOBALS['user\u language']
并且您的示例在脚本运行时随时执行“只需使用print\r(get\u user\u language())”这是我希望避免的。当我忘了在开始时把它放在哪里时,我花了很多时间来寻找错误。我希望能成功autonomous@BASILIO:是否将所有出现的$user\u language
替换为get\u user\u language()
真的不是一个选项?PHP确实为对象提供了一个“神奇的getter”特性,但对全局变量没有。